From cf132572ac7772e909e3627ed513dccf13d1269e Mon Sep 17 00:00:00 2001 From: theo3 Date: Sat, 18 Jul 2020 01:06:00 -0700 Subject: [PATCH] room entity funcs partially decomped --- asm/code_0804B058.s | 800 -------------------------------------------- include/functions.h | 6 + include/room.h | 2 + linker.ld | 3 +- src/code_0808091C.c | 50 +++ src/room.c | 492 +++++++++++++++++++++++++-- 6 files changed, 518 insertions(+), 835 deletions(-) create mode 100644 src/code_0808091C.c diff --git a/asm/code_0804B058.s b/asm/code_0804B058.s index 47f54006..7f31151d 100644 --- a/asm/code_0804B058.s +++ b/asm/code_0804B058.s @@ -350,803 +350,3 @@ _0804B3BA: rsbs r0, r0, #0 bl sub_080526F8 pop {r4, r5, pc} - - thumb_func_start sub_0804B3C4 -sub_0804B3C4: @ 0x0804B3C4 - push {lr} - bl sub_0804B29C - pop {pc} - - thumb_func_start sub_0804B3CC -sub_0804B3CC: @ 0x0804B3CC - movs r0, #1 - bx lr - - thumb_func_start sub_0804B3D0 -sub_0804B3D0: @ 0x0804B3D0 - push {lr} - movs r0, #0 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B3DC -sub_0804B3DC: @ 0x0804B3DC - movs r0, #1 - bx lr - - thumb_func_start sub_0804B3E0 -sub_0804B3E0: @ 0x0804B3E0 - push {lr} - movs r0, #1 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B3EC -sub_0804B3EC: @ 0x0804B3EC - movs r0, #1 - bx lr - - thumb_func_start sub_0804B3F0 -sub_0804B3F0: @ 0x0804B3F0 - push {lr} - movs r0, #2 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B3FC -sub_0804B3FC: @ 0x0804B3FC - movs r0, #1 - bx lr - - thumb_func_start sub_0804B400 -sub_0804B400: @ 0x0804B400 - push {lr} - movs r0, #3 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B40C -sub_0804B40C: @ 0x0804B40C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B410 -sub_0804B410: @ 0x0804B410 - push {lr} - movs r0, #4 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B41C -sub_0804B41C: @ 0x0804B41C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B420 -sub_0804B420: @ 0x0804B420 - push {lr} - movs r0, #5 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B42C -sub_0804B42C: @ 0x0804B42C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B430 -sub_0804B430: @ 0x0804B430 - push {lr} - movs r0, #6 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B43C -sub_0804B43C: @ 0x0804B43C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B440 -sub_0804B440: @ 0x0804B440 - push {lr} - movs r0, #7 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B44C -sub_0804B44C: @ 0x0804B44C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B450 -sub_0804B450: @ 0x0804B450 - push {lr} - movs r0, #8 - bl sub_08030118 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B45C -sub_0804B45C: @ 0x0804B45C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B460 -sub_0804B460: @ 0x0804B460 - push {lr} - movs r0, #9 - bl sub_08030118 - ldr r0, _0804B474 @ =gArea - movs r1, #3 - strb r1, [r0, #3] - movs r1, #0x4e - strb r1, [r0] - pop {pc} - .align 2, 0 -_0804B474: .4byte gArea - - thumb_func_start sub_0804B478 -sub_0804B478: @ 0x0804B478 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B47C -sub_0804B47C: @ 0x0804B47C - push {lr} - movs r0, #0xa - bl sub_08030118 - ldr r0, _0804B490 @ =gArea - movs r1, #3 - strb r1, [r0, #3] - movs r1, #0x4e - strb r1, [r0] - pop {pc} - .align 2, 0 -_0804B490: .4byte gArea - - thumb_func_start sub_0804B494 -sub_0804B494: @ 0x0804B494 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B498 -sub_0804B498: @ 0x0804B498 - push {lr} - movs r0, #0x23 - bl sub_080575C8 - bl sub_08057688 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B4A8 -sub_0804B4A8: @ 0x0804B4A8 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B4AC -sub_0804B4AC: @ 0x0804B4AC - push {lr} - movs r0, #0x23 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B4B8 -sub_0804B4B8: @ 0x0804B4B8 - push {lr} - movs r0, #0x23 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B4C4 -sub_0804B4C4: @ 0x0804B4C4 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B4C8 -sub_0804B4C8: @ 0x0804B4C8 - push {lr} - movs r0, #0x22 - bl sub_080580B0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B4D4 -sub_0804B4D4: @ 0x0804B4D4 - push {lr} - movs r0, #0x22 - bl sub_080580B0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B4E0 -sub_0804B4E0: @ 0x0804B4E0 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B4E4 -sub_0804B4E4: @ 0x0804B4E4 - push {lr} - movs r0, #0x22 - bl sub_080580B0 - movs r0, #2 - bl GetInventoryValue - cmp r0, #0 - beq _0804B4FC - movs r0, #0x56 - bl SetGlobalFlag -_0804B4FC: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B500 -sub_0804B500: @ 0x0804B500 - push {lr} - movs r0, #0x22 - bl sub_080580B0 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B50C -sub_0804B50C: @ 0x0804B50C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B510 -sub_0804B510: @ 0x0804B510 - push {lr} - movs r0, #0x1e - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B51C -sub_0804B51C: @ 0x0804B51C - push {lr} - movs r0, #0x1e - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B528 -sub_0804B528: @ 0x0804B528 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B52C -sub_0804B52C: @ 0x0804B52C - push {lr} - movs r0, #0x21 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B538 -sub_0804B538: @ 0x0804B538 - push {lr} - movs r0, #0x21 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B544 -sub_0804B544: @ 0x0804B544 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B548 -sub_0804B548: @ 0x0804B548 - push {lr} - movs r0, #0x1f - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B554 -sub_0804B554: @ 0x0804B554 - push {lr} - movs r0, #0x1f - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B560 -sub_0804B560: @ 0x0804B560 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B564 -sub_0804B564: @ 0x0804B564 - push {lr} - movs r0, #0x20 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B570 -sub_0804B570: @ 0x0804B570 - push {lr} - movs r0, #0x20 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B57C -sub_0804B57C: @ 0x0804B57C - movs r0, #1 - bx lr - - thumb_func_start sub_0804B580 -sub_0804B580: @ 0x0804B580 - push {lr} - movs r0, #0x20 - bl sub_080575C8 - ldr r0, _0804B5A0 @ =gLinkEntity - movs r1, #0x32 - ldrsh r0, [r0, r1] - ldr r1, _0804B5A4 @ =gRoomControls - ldrh r1, [r1, #8] - subs r0, r0, r1 - cmp r0, #0x40 - ble _0804B59E - ldr r0, _0804B5A8 @ =gUnk_080D6138 - bl LoadRoomEntityList -_0804B59E: - pop {pc} - .align 2, 0 -_0804B5A0: .4byte gLinkEntity -_0804B5A4: .4byte gRoomControls -_0804B5A8: .4byte gUnk_080D6138 - - thumb_func_start sub_0804B5AC -sub_0804B5AC: @ 0x0804B5AC - push {lr} - movs r0, #0x20 - bl sub_080575C8 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B5B8 -sub_0804B5B8: @ 0x0804B5B8 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B5BC -sub_0804B5BC: @ 0x0804B5BC - push {lr} - ldr r0, _0804B5D0 @ =gUnk_030010A0 - ldrh r0, [r0, #0x12] - cmp r0, #0x40 - bls _0804B5CC - ldr r0, _0804B5D4 @ =gUnk_080D6210 - bl LoadRoomEntityList -_0804B5CC: - pop {pc} - .align 2, 0 -_0804B5D0: .4byte gUnk_030010A0 -_0804B5D4: .4byte gUnk_080D6210 - - thumb_func_start sub_0804B5D8 -sub_0804B5D8: @ 0x0804B5D8 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B5DC -sub_0804B5DC: @ 0x0804B5DC - push {r4, r5, r6, lr} - movs r0, #0x2c - bl CheckKinstoneFused - cmp r0, #0 - beq _0804B5EE - ldr r0, _0804B618 @ =gUnk_080D6340 - bl LoadRoomEntityList -_0804B5EE: - movs r6, #0 - ldr r4, _0804B61C @ =gUnk_080D64F8 - movs r5, #7 -_0804B5F4: - ldrh r0, [r4] - adds r4, #2 - bl GetInventoryValue - cmp r0, #0 - beq _0804B602 - adds r6, #1 -_0804B602: - subs r5, #1 - cmp r5, #0 - bge _0804B5F4 - movs r0, #0x8b - bl CheckLocalFlag - cmp r0, #0 - beq _0804B648 - ldr r4, _0804B620 @ =gUnk_080D6508 - movs r5, #0 - b _0804B628 - .align 2, 0 -_0804B618: .4byte gUnk_080D6340 -_0804B61C: .4byte gUnk_080D64F8 -_0804B620: .4byte gUnk_080D6508 -_0804B624: - adds r5, #1 - adds r4, #2 -_0804B628: - cmp r5, r6 - bge _0804B648 - ldrh r0, [r4] - bl CheckLocalFlag - cmp r0, #0 - bne _0804B624 - ldrh r0, [r4] - bl SetLocalFlag - movs r0, #0x8b - bl ClearLocalFlag - movs r0, #0x8c - bl SetLocalFlag -_0804B648: - movs r0, #0x1f - bl CheckLocalFlag - cmp r0, #0 - beq _0804B658 - ldr r0, _0804B6CC @ =gUnk_080D6360 - bl LoadRoomEntityList -_0804B658: - movs r0, #0x20 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B668 - ldr r0, _0804B6D0 @ =gUnk_080D6380 - bl LoadRoomEntityList -_0804B668: - movs r0, #0x21 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B678 - ldr r0, _0804B6D4 @ =gUnk_080D63A0 - bl LoadRoomEntityList -_0804B678: - movs r0, #0x22 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B688 - ldr r0, _0804B6D8 @ =gUnk_080D63C0 - bl LoadRoomEntityList -_0804B688: - movs r0, #0x23 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B698 - ldr r0, _0804B6DC @ =gUnk_080D63E0 - bl LoadRoomEntityList -_0804B698: - movs r0, #0x24 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B6A8 - ldr r0, _0804B6E0 @ =gUnk_080D6400 - bl LoadRoomEntityList -_0804B6A8: - movs r0, #0x25 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B6B8 - ldr r0, _0804B6E4 @ =gUnk_080D6420 - bl LoadRoomEntityList -_0804B6B8: - movs r0, #0x26 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B6C8 - ldr r0, _0804B6E8 @ =gUnk_080D6440 - bl LoadRoomEntityList -_0804B6C8: - pop {r4, r5, r6, pc} - .align 2, 0 -_0804B6CC: .4byte gUnk_080D6360 -_0804B6D0: .4byte gUnk_080D6380 -_0804B6D4: .4byte gUnk_080D63A0 -_0804B6D8: .4byte gUnk_080D63C0 -_0804B6DC: .4byte gUnk_080D63E0 -_0804B6E0: .4byte gUnk_080D6400 -_0804B6E4: .4byte gUnk_080D6420 -_0804B6E8: .4byte gUnk_080D6440 - - thumb_func_start sub_0804B6EC -sub_0804B6EC: @ 0x0804B6EC - movs r0, #1 - bx lr - - thumb_func_start sub_0804B6F0 -sub_0804B6F0: @ 0x0804B6F0 - push {lr} - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0804B71C - ldr r0, _0804B714 @ =gUnk_080D6578 - bl LoadRoomEntityList - movs r0, #0x73 - bl CheckLocalFlag - cmp r0, #0 - bne _0804B722 - ldr r0, _0804B718 @ =gUnk_080D6638 - bl LoadRoomEntityList - b _0804B728 - .align 2, 0 -_0804B714: .4byte gUnk_080D6578 -_0804B718: .4byte gUnk_080D6638 -_0804B71C: - ldr r0, _0804B72C @ =gUnk_080D6558 - bl LoadRoomEntityList -_0804B722: - ldr r0, _0804B730 @ =gUnk_080D6618 - bl LoadRoomEntityList -_0804B728: - pop {pc} - .align 2, 0 -_0804B72C: .4byte gUnk_080D6558 -_0804B730: .4byte gUnk_080D6618 - - thumb_func_start sub_0804B734 -sub_0804B734: @ 0x0804B734 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B738 -sub_0804B738: @ 0x0804B738 - push {lr} - ldr r0, _0804B770 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - cmp r0, #4 - bls _0804B748 - ldr r0, _0804B774 @ =gUnk_080D6714 - bl LoadRoomEntityList -_0804B748: - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - bne _0804B77C - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - beq _0804B77C - movs r0, #0x6a - bl CheckLocalFlag - cmp r0, #0 - beq _0804B77C - ldr r0, _0804B778 @ =gUnk_080D6734 - bl LoadRoomEntityList - b _0804B782 - .align 2, 0 -_0804B770: .4byte gUnk_02002A40 -_0804B774: .4byte gUnk_080D6714 -_0804B778: .4byte gUnk_080D6734 -_0804B77C: - ldr r0, _0804B784 @ =gUnk_080D66F4 - bl LoadRoomEntityList -_0804B782: - pop {pc} - .align 2, 0 -_0804B784: .4byte gUnk_080D66F4 - - thumb_func_start sub_0804B788 -sub_0804B788: @ 0x0804B788 - movs r0, #1 - bx lr - - thumb_func_start sub_0804B78C -sub_0804B78C: @ 0x0804B78C - push {lr} - ldr r0, _0804B7A0 @ =gUnk_02002A40 - ldrb r0, [r0, #8] - cmp r0, #7 - bls _0804B79C - ldr r0, _0804B7A4 @ =gUnk_080D6924 - bl LoadRoomEntityList -_0804B79C: - pop {pc} - .align 2, 0 -_0804B7A0: .4byte gUnk_02002A40 -_0804B7A4: .4byte gUnk_080D6924 - - thumb_func_start sub_0804B7A8 -sub_0804B7A8: @ 0x0804B7A8 - push {r4, lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B7C8 - bl Random - movs r1, #3 - bl __modsi3 - adds r4, r0, #0 - movs r0, #1 - bl ClearLocalFlag - b _0804B7D0 -_0804B7C8: - movs r4, #0 - movs r0, #1 - bl SetLocalFlag -_0804B7D0: - ldr r2, _0804B7E0 @ =gRoomVars - ldr r1, _0804B7E4 @ =gUnk_080D6A74 - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r2, #0x78] - movs r0, #1 - pop {r4, pc} - .align 2, 0 -_0804B7E0: .4byte gRoomVars -_0804B7E4: .4byte gUnk_080D6A74 - - thumb_func_start sub_0804B7E8 -sub_0804B7E8: @ 0x0804B7E8 - push {lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B81E - movs r0, #0x91 - bl ClearLocalFlag - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl DoFade - ldr r2, _0804B820 @ =gLinkEntity - ldr r1, _0804B824 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0x50 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - adds r0, #0x38 - strh r0, [r2, #0x32] - ldr r2, _0804B828 @ =gUnk_08010A5C - movs r0, #1 - movs r1, #2 - bl sub_080751E8 -_0804B81E: - pop {pc} - .align 2, 0 -_0804B820: .4byte gLinkEntity -_0804B824: .4byte gRoomControls -_0804B828: .4byte gUnk_08010A5C - - thumb_func_start sub_0804B82C -sub_0804B82C: @ 0x0804B82C - push {r4, lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B84A - bl Random - adds r4, r0, #0 - movs r0, #1 - ands r4, r0 - movs r0, #2 - bl ClearLocalFlag - b _0804B852 -_0804B84A: - movs r4, #0 - movs r0, #2 - bl SetLocalFlag -_0804B852: - ldr r2, _0804B864 @ =gRoomVars - ldr r1, _0804B868 @ =gUnk_080D6B18 - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r2, #0x78] - movs r0, #1 - pop {r4, pc} - .align 2, 0 -_0804B864: .4byte gRoomVars -_0804B868: .4byte gUnk_080D6B18 - - thumb_func_start sub_0804B86C -sub_0804B86C: @ 0x0804B86C - push {lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B8A2 - movs r0, #0x91 - bl ClearLocalFlag - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl DoFade - ldr r2, _0804B8A4 @ =gLinkEntity - ldr r1, _0804B8A8 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0x50 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - adds r0, #0x38 - strh r0, [r2, #0x32] - ldr r2, _0804B8AC @ =gUnk_08010A5C - movs r0, #1 - movs r1, #2 - bl sub_080751E8 -_0804B8A2: - pop {pc} - .align 2, 0 -_0804B8A4: .4byte gLinkEntity -_0804B8A8: .4byte gRoomControls -_0804B8AC: .4byte gUnk_08010A5C - - thumb_func_start sub_0804B8B0 -sub_0804B8B0: @ 0x0804B8B0 - push {r4, lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B8D0 - bl Random - movs r1, #3 - bl __modsi3 - adds r4, r0, #0 - movs r0, #3 - bl ClearLocalFlag - b _0804B8D8 -_0804B8D0: - movs r4, #0 - movs r0, #3 - bl SetLocalFlag -_0804B8D8: - ldr r2, _0804B8E8 @ =gRoomVars - ldr r1, _0804B8EC @ =gUnk_080D6BB8 - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r2, #0x78] - movs r0, #1 - pop {r4, pc} - .align 2, 0 -_0804B8E8: .4byte gRoomVars -_0804B8EC: .4byte gUnk_080D6BB8 - - thumb_func_start sub_0804B8F0 -sub_0804B8F0: @ 0x0804B8F0 - push {lr} - movs r0, #0x91 - bl CheckLocalFlag - cmp r0, #0 - beq _0804B926 - movs r0, #0x91 - bl ClearLocalFlag - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl DoFade - ldr r2, _0804B928 @ =gLinkEntity - ldr r1, _0804B92C @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0x60 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - adds r0, #0x38 - strh r0, [r2, #0x32] - ldr r2, _0804B930 @ =gUnk_08010A5C - movs r0, #1 - movs r1, #2 - bl sub_080751E8 -_0804B926: - pop {pc} - .align 2, 0 -_0804B928: .4byte gLinkEntity -_0804B92C: .4byte gRoomControls -_0804B930: .4byte gUnk_08010A5C - - thumb_func_start sub_0804B934 -sub_0804B934: @ 0x0804B934 - movs r0, #1 - bx lr diff --git a/include/functions.h b/include/functions.h index 1694c6ac..1fb4b03b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -106,4 +106,10 @@ extern void sub_080AD918(void); extern void sub_0801E104(void); extern void MenuFadeIn(u32, u32); extern void sub_080A57F4(void); +extern void sub_0804B29C(u32); +extern void sub_08030118(u32); +extern void sub_080575C8(u32); +extern void sub_08057688(void); +extern void sub_080580B0(u32); +extern void sub_080751E8(u32, u32, void*); #endif diff --git a/include/room.h b/include/room.h index ccde88c8..57e7b80f 100644 --- a/include/room.h +++ b/include/room.h @@ -44,6 +44,8 @@ typedef struct { u8 filler4[48]; u8 filler5[28]; u32 greatFairyState; + u8 field_0x68[9]; + u32 field_0x78; } RoomVars; //Packets used to store which entities to load in a room diff --git a/linker.ld b/linker.ld index bae7d5ec..1e71055f 100644 --- a/linker.ld +++ b/linker.ld @@ -441,6 +441,7 @@ SECTIONS { src/sub_0804AFF4.o(.text); src/loadRoom.o(.text); asm/code_0804B058.o(.text); + src/room.o(.text); asm/upperInn.o(.text); asm/code_0804B9F8.o(.text); src/sub_08050008.o(.text); @@ -661,7 +662,7 @@ SECTIONS { asm/code_0807CAA0.o(.text); src/flags.o(.text); asm/code_0807CC3C.o(.text); - src/room.o(.text); + src/code_0808091C.o(.text); /* objects */ asm/itemOnGround.o(.text); asm/deathFx.o(.text); diff --git a/src/code_0808091C.c b/src/code_0808091C.c new file mode 100644 index 00000000..3ba2096e --- /dev/null +++ b/src/code_0808091C.c @@ -0,0 +1,50 @@ +#include "global.h" +#include "room.h" + +extern void sub_0805E5A8(); + +extern RoomControls gRoomControls; +extern u32 gUnk_0200B650; +extern u32 gUnk_02025EB0; +extern u8 gUnk_030010A0[10]; + +extern void DoExitTransition(Entity*); +extern void sub_080809D4(); + +void sub_0808091C(Entity* param_1, u32 param_2) + +{ + DoExitTransition(param_1); + gUnk_030010A0[9] = param_2; + return; +} + +void sub_08080930(void) + +{ + gRoomControls.unk3 = 5; + gRoomControls.unk4 = 0; + gRoomControls.unk2 = 2; + gRoomControls.filler[0] = 0; + sub_0805E5A8(); + return; +} + +u32* GetLayerByIndex(u32 param_1) + +{ + + if (param_1 == 2) { + return &gUnk_0200B650; + } else { + return &gUnk_02025EB0; + } +} + +void sub_08080964(u16 time, u32 magnitude) + +{ + gRoomControls.screenShakeTime = time; + gRoomControls.screenShakeMagnitude = magnitude & 7; + return; +} diff --git a/src/room.c b/src/room.c index 3ba2096e..695ca76c 100644 --- a/src/room.c +++ b/src/room.c @@ -1,50 +1,474 @@ #include "global.h" +#include "entity.h" +#include "area.h" #include "room.h" +#include "functions.h" +#include "flags.h" +#include "link.h" -extern void sub_0805E5A8(); +typedef struct { + u8 field_0x0[8]; + u8 field_0x8; + u8 field_0x9; + u8 field_0xa[8]; + u16 field_0x12; +} struct_030010A0; -extern RoomControls gRoomControls; -extern u32 gUnk_0200B650; -extern u32 gUnk_02025EB0; -extern u8 gUnk_030010A0[10]; +typedef struct { + u8 filler[8]; + u8 field_0x8; +} struct_02002A40; -extern void DoExitTransition(Entity*); -extern void sub_080809D4(); +extern struct_030010A0 gUnk_030010A0; +extern struct_02002A40 gUnk_02002A40; -void sub_0808091C(Entity* param_1, u32 param_2) - -{ - DoExitTransition(param_1); - gUnk_030010A0[9] = param_2; - return; +void sub_0804B3C4(u32 arg0) { + sub_0804B29C(arg0); } -void sub_08080930(void) - -{ - gRoomControls.unk3 = 5; - gRoomControls.unk4 = 0; - gRoomControls.unk2 = 2; - gRoomControls.filler[0] = 0; - sub_0805E5A8(); - return; +u32 sub_0804B3CC(u32 arg0) { + return 1; } -u32* GetLayerByIndex(u32 param_1) +void sub_0804B3D0() { + sub_08030118(0); +} -{ +u32 sub_0804B3DC() { + return 1; +} - if (param_1 == 2) { - return &gUnk_0200B650; - } else { - return &gUnk_02025EB0; +void sub_0804B3E0() { + sub_08030118(1); +} + +u32 sub_0804B3EC() { + return 1; +} + +void sub_0804B3F0() { + sub_08030118(2); +} + +u32 sub_0804B3FC() { + return 1; +} + +void sub_0804B400() { + sub_08030118(3); +} + +u32 sub_0804B40C() { + return 1; +} + +void sub_0804B410() { + sub_08030118(4); +} + +u32 sub_0804B41C() { + return 1; +} + +void sub_0804B420() { + sub_08030118(5); +} + +u32 sub_0804B42C() { + return 1; +} + +void sub_0804B430() { + sub_08030118(6); +} + +u32 sub_0804B43C() { + return 1; +} + +void sub_0804B440() { + sub_08030118(7); +} + +u32 sub_0804B44C() { + return 1; +} + +void sub_0804B450() { + sub_08030118(8); +} + +u32 sub_0804B45C() { + return 1; +} + +void sub_0804B460() { + Area* a; + + sub_08030118(9); + a = &gArea; + *((u8*)&a->localFlagOffset - 1) = 3; + a->areaMetadata = 0x4e; +} + +u32 sub_0804B478() { + return 1; +} + +void sub_0804B47C() { + Area* a; + + sub_08030118(10); + a = &gArea; + *((u8*)&a->localFlagOffset - 1) = 3; + a->areaMetadata = 0x4e; +} + +u32 sub_0804B494() { + return 1; +} + +void sub_0804B498() { + sub_080575C8(35); + sub_08057688(); +} + +u32 sub_0804B4A8() { + return 1; +} + +void sub_0804B4AC() { + sub_080575C8(35); +} + +void sub_0804B4B8() { + sub_080575C8(35); +} + +u32 sub_0804B4C4() { + return 1; +} + +void sub_0804B4C8() { + sub_080580B0(34); +} + +void sub_0804B4D4() { + sub_080580B0(34); +} + +u32 sub_0804B4E0() { + return 1; +} + +void sub_0804B4E4(void) { + sub_080580B0(0x22); + // white sword + if (GetInventoryValue(0x2)) + SetGlobalFlag(0x56); +} + +void sub_0804B500() { + sub_080580B0(34); +} + +u32 sub_0804B50C() { + return 1; +} + +void sub_0804B510() { + sub_080575C8(30); +} + +void sub_0804B51C() { + sub_080575C8(30); +} + +u32 sub_0804B528() { + return 1; +} + +void sub_0804B52C() { + sub_080575C8(33); +} + +void sub_0804B538() { + sub_080575C8(33); +} + +u32 sub_0804B544() { + return 1; +} + +void sub_0804B548() { + sub_080575C8(31); +} + +void sub_0804B554() { + sub_080575C8(31); +} + +u32 sub_0804B560() { + return 1; +} + +void sub_0804B564() { + sub_080575C8(32); +} + +void sub_0804B570() { + sub_080575C8(32); +} + +u32 sub_0804B57C() { + return 1; +} + +extern EntityData* gUnk_080D6138; + +void sub_0804B580(void) { + sub_080575C8(0x20); + if (gLinkEntity.y.HALF.HI - gRoomControls.roomOriginY > 0x40) { + LoadRoomEntityList(&gUnk_080D6138); } } -void sub_08080964(u16 time, u32 magnitude) - -{ - gRoomControls.screenShakeTime = time; - gRoomControls.screenShakeMagnitude = magnitude & 7; - return; +void sub_0804B5AC() { + sub_080575C8(32); } + +u32 sub_0804B5B8() { + return 1; +} + +extern EntityData* gUnk_080D6210; + +void sub_0804B5BC(void) { + if (gUnk_030010A0.field_0x12 > 0x40) { + LoadRoomEntityList(&gUnk_080D6210); + } +} + +u32 sub_0804B5D8() { + return 1; +} + +extern EntityData* gUnk_080D6340; +extern EntityData* gUnk_080D6360; +extern EntityData* gUnk_080D6380; +extern EntityData* gUnk_080D63A0; +extern EntityData* gUnk_080D63C0; +extern EntityData* gUnk_080D63E0; +extern EntityData* gUnk_080D6400; +extern EntityData* gUnk_080D6420; +extern EntityData* gUnk_080D6440; + +extern u16 gUnk_080D64F8; +extern u16 gUnk_080D6508; + +void sub_0804B5DC(void) { + u16 itemID; + s32 i; + u16* itemArr; + u16* flagArr; + s32 j; + + if (CheckKinstoneFused(0x2c)) { + LoadRoomEntityList(&gUnk_080D6340); + } + j = 0; + itemArr = &gUnk_080D64F8; + for (i = 7; i >= 0; i--) { + itemID = *itemArr; + itemArr++; + if (GetInventoryValue(itemID)) { + j++; + } + } + if (CheckLocalFlag(0x8b)) { + flagArr = &gUnk_080D6508; + i = 0; + while (i < j) { + if (CheckLocalFlag(*flagArr) == 0) { + SetLocalFlag(*flagArr); + ClearLocalFlag(0x8b); + SetLocalFlag(0x8c); + break; + } + i++; + flagArr++; + } + } + if (CheckLocalFlag(0x1f)) { + LoadRoomEntityList(&gUnk_080D6360); + } + if (CheckLocalFlag(0x20)) { + LoadRoomEntityList(&gUnk_080D6380); + } + if (CheckLocalFlag(0x21)) { + LoadRoomEntityList(&gUnk_080D63A0); + } + if (CheckLocalFlag(0x22)) { + LoadRoomEntityList(&gUnk_080D63C0); + } + if (CheckLocalFlag(0x23)) { + LoadRoomEntityList(&gUnk_080D63E0); + } + if (CheckLocalFlag(0x24)) { + LoadRoomEntityList(&gUnk_080D6400); + } + if (CheckLocalFlag(0x25)) { + LoadRoomEntityList(&gUnk_080D6420); + } + if (CheckLocalFlag(0x26)) { + LoadRoomEntityList(&gUnk_080D6440); + } +} + +u32 sub_0804B6EC() { + return 1; +} + +extern EntityData* gUnk_080D6578; +extern EntityData* gUnk_080D6638; +extern EntityData* gUnk_080D6558; +extern EntityData* gUnk_080D6618; + +void sub_0804B6F0(void) { + // flippers + if (GetInventoryValue(0x46) == 0) { + LoadRoomEntityList(&gUnk_080D6578); + if (CheckLocalFlag(0x73) == 0) { + LoadRoomEntityList(&gUnk_080D6638); + return; + } + } else { + LoadRoomEntityList(&gUnk_080D6558); + } + LoadRoomEntityList(&gUnk_080D6618); +} + +u32 sub_0804B734() { + return 1; +} + +extern EntityData* gUnk_080D6714; +extern EntityData* gUnk_080D6734; +extern EntityData* gUnk_080D66F4; + +void sub_0804B738(void) { + if (gUnk_02002A40.field_0x8 > 4) { + LoadRoomEntityList(&gUnk_080D6714); + } + // flippers + if (!GetInventoryValue(0x46) && CheckGlobalFlag(0x29) && CheckLocalFlag(0x6a)) { + LoadRoomEntityList(&gUnk_080D6734); + } else { + LoadRoomEntityList(&gUnk_080D66F4); + } +} + +u32 sub_0804B788() { + return 1; +} + +extern EntityData* gUnk_080D6924; + +void sub_0804B78C(void) { + if (gUnk_02002A40.field_0x8 > 7) { + LoadRoomEntityList(&gUnk_080D6924); + } +} + +extern u32 gUnk_080D6A74[]; + +u32 sub_0804B7A8(void) { + u32 index; + + if (CheckLocalFlag(0x91) != 0) { + index = (s32)Random() % 3; + ClearLocalFlag(1); + } else { + index = 0; + SetLocalFlag(1); + } + gRoomVars.field_0x78 = gUnk_080D6A74[index]; + return 1; +} + +extern void* gUnk_08010A5C[]; + +void sub_0804B7E8(void) +{ + if (CheckLocalFlag(0x91)) { + ClearLocalFlag(0x91); + DoFade(5, 0x100); + gLinkEntity.x.HALF.HI = gRoomControls.roomOriginX + 0x50; + gLinkEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x38; + sub_080751E8(1, 2, &gUnk_08010A5C); + } +} + +extern u32 gUnk_080D6B18[]; + +u32 sub_0804B82C(void) +{ + u32 index; + + if (CheckLocalFlag(0x91) != 0) { + index = Random() & 1; + ClearLocalFlag(2); + } + else { + index = 0; + SetLocalFlag(2); + } + gRoomVars.field_0x78 = gUnk_080D6B18[index]; + return 1; +} + +void sub_0804B86C(void) +{ + if (CheckLocalFlag(0x91) != 0) { + ClearLocalFlag(0x91); + DoFade(5, 0x100); + gLinkEntity.x.HALF.HI = gRoomControls.roomOriginX + 0x50; + gLinkEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x38; + sub_080751E8(1, 2, &gUnk_08010A5C); + } +} + +extern u32 gUnk_080D6BB8[]; + +u32 sub_0804B8B0(void) +{ + s32 index; + + if (CheckLocalFlag(0x91) != 0) { + index = (s32)Random() % 3; + ClearLocalFlag(3); + } + else { + index = 0; + SetLocalFlag(3); + } + gRoomVars.field_0x78 = gUnk_080D6BB8[index]; + return 1; +} + +extern void* gUnk_08010A5C[]; + +void sub_0804B8F0(void) +{ + if (CheckLocalFlag(0x91)) { + ClearLocalFlag(0x91); + DoFade(5 ,0x100); + gLinkEntity.x.HALF.HI = gRoomControls.roomOriginX + 0x60; + gLinkEntity.y.HALF.HI = gRoomControls.roomOriginY + 0x38; + sub_080751E8(1,2, &gUnk_08010A5C); + } +} + +u32 sub_0804B934() { + return 1; +} \ No newline at end of file