diff --git a/asm/code_0801D79C.s b/asm/code_0801D79C.s index 3d2409d6..297a0689 100644 --- a/asm/code_0801D79C.s +++ b/asm/code_0801D79C.s @@ -592,7 +592,7 @@ _0801DBF0: ldrb r0, [r6] ldrb r1, [r6, #1] movs r2, #3 - bl sub_0804B0FC + bl GetRoomProperty adds r4, r0, #0 cmp r4, #0 bne _0801DC04 @@ -845,7 +845,7 @@ _0801DDE4: ldrb r0, [r4] ldrb r1, [r4, #1] movs r2, #3 - bl sub_0804B0FC + bl GetRoomProperty adds r6, r0, #0 adds r0, r4, #0 bl sub_0801DF10 diff --git a/asm/code_0804B058.s b/asm/code_0804B058.s index 9df89063..47f54006 100644 --- a/asm/code_0804B058.s +++ b/asm/code_0804B058.s @@ -2,124 +2,6 @@ .text .syntax unified - thumb_func_start sub_0804B058 -sub_0804B058: @ 0x0804B058 - push {r4, r5, lr} - adds r4, r0, #0 - cmp r4, #0 - beq _0804B0AE - ldrb r0, [r4] - cmp r0, #0xff - beq _0804B0AE - movs r5, #0 -_0804B068: - cmp r5, #0x1f - bhi _0804B09E - ldrb r1, [r4] - movs r0, #0xf - ands r0, r1 - cmp r0, #3 - bne _0804B09E - adds r0, r5, #0 - bl sub_08049D1C - cmp r0, #0 - beq _0804B0A4 - adds r0, r4, #0 - bl CreateEntity - adds r2, r0, #0 - cmp r2, #0 - beq _0804B0A4 - ldrb r0, [r2, #8] - cmp r0, #3 - bne _0804B0A4 - movs r0, #0x80 - adds r2, #0x6c - adds r1, r5, #0 - orrs r1, r0 - strb r1, [r2] - b _0804B0A4 -_0804B09E: - adds r0, r4, #0 - bl CreateEntity -_0804B0A4: - adds r5, #1 - adds r4, #0x10 - ldrb r0, [r4] - cmp r0, #0xff - bne _0804B068 -_0804B0AE: - pop {r4, r5, pc} - - thumb_func_start sub_0804B0B0 -sub_0804B0B0: @ 0x0804B0B0 - push {lr} - movs r2, #1 - bl sub_0804B0FC - bl LoadRoomEntityList - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B0C0 -sub_0804B0C0: @ 0x0804B0C0 - push {lr} - adds r2, r1, #0 - ldr r3, _0804B0E0 @ =gUnk_02017654 - movs r1, #0 - str r1, [r3] - ldr r1, _0804B0E4 @ =gUnk_080D50FC - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - cmp r1, #0 - beq _0804B0DE - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r3] -_0804B0DE: - pop {pc} - .align 2, 0 -_0804B0E0: .4byte gUnk_02017654 -_0804B0E4: .4byte gUnk_080D50FC - - thumb_func_start sub_0804B0E8 -sub_0804B0E8: @ 0x0804B0E8 - push {lr} - movs r2, #4 - bl sub_0804B0FC - cmp r0, #0 - beq _0804B0F8 - bl _call_via_r0 -_0804B0F8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0804B0FC -sub_0804B0FC: @ 0x0804B0FC - push {r4, lr} - adds r3, r1, #0 - adds r4, r2, #0 - movs r2, #0 - ldr r1, _0804B124 @ =gUnk_080D50FC - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - cmp r1, #0 - beq _0804B120 - lsls r0, r3, #2 - adds r0, r0, r1 - ldr r2, [r0] - cmp r2, #0 - beq _0804B120 - lsls r0, r4, #2 - adds r0, r0, r2 - ldr r2, [r0] -_0804B120: - adds r0, r2, #0 - pop {r4, pc} - .align 2, 0 -_0804B124: .4byte gUnk_080D50FC - thumb_func_start GetCurrentRoomProperty GetCurrentRoomProperty: @ 0x0804B128 push {lr} diff --git a/asm/code_08050038.s b/asm/code_08050038.s index e092fda6..880da10c 100644 --- a/asm/code_08050038.s +++ b/asm/code_08050038.s @@ -3807,7 +3807,7 @@ sub_08051E84: @ 0x08051E84 strh r0, [r1, #4] ldrb r0, [r4] ldrb r1, [r4, #1] - bl sub_0804B0C0 + bl SetCurrentRoomPropertyList ldrb r0, [r4] ldrb r1, [r4, #1] bl sub_08052FD8 diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s index 656e04d5..43807c93 100644 --- a/asm/code_080526F8.s +++ b/asm/code_080526F8.s @@ -2815,12 +2815,12 @@ sub_08053CC8: @ 0x08053CC8 ldrb r0, [r4, #4] ldrb r1, [r4, #5] movs r2, #1 - bl sub_0804B0FC + bl GetRoomProperty bl LoadRoomEntityList ldrb r0, [r4, #4] ldrb r1, [r4, #5] movs r2, #2 - bl sub_0804B0FC + bl GetRoomProperty bl LoadRoomEntityList movs r5, #1 strb r5, [r6, #6] @@ -2946,12 +2946,12 @@ sub_08053DB4: @ 0x08053DB4 ldrb r0, [r4, #4] ldrb r1, [r4, #5] movs r2, #1 - bl sub_0804B0FC + bl GetRoomProperty bl LoadRoomEntityList ldrb r0, [r4, #4] ldrb r1, [r4, #5] movs r2, #2 - bl sub_0804B0FC + bl GetRoomProperty bl LoadRoomEntityList movs r0, #0x78 strh r0, [r5, #8] diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index 34e36be2..0d6f007f 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -123,7 +123,7 @@ sub_08054974: @ 0x08054974 adds r6, r1, r0 ldrb r0, [r6, #2] ldrb r1, [r6, #3] - bl sub_0804B0C0 + bl SetCurrentRoomPropertyList ldr r4, _080549B4 @ =gRoomControls ldrb r0, [r6, #2] strb r0, [r4, #4] diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 52f0cba2..ac9fe0fd 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -5,22 +5,6 @@ .syntax unified .text - - thumb_func_start sub_080A5574 -sub_080A5574: @ 0x080A5574 - push {lr} - ldr r1, _080A558C @ =gUnk_08128BF8 - ldr r0, _080A5590 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_080A57F4 - pop {pc} - .align 2, 0 -_080A558C: .4byte gUnk_08128BF8 -_080A5590: .4byte gMenu thumb_func_start sub_080A5594 sub_080A5594: @ 0x080A5594 diff --git a/include/functions.h b/include/functions.h index 7f5e2577..1694c6ac 100644 --- a/include/functions.h +++ b/include/functions.h @@ -105,4 +105,5 @@ extern void sub_080AD9B0(void); extern void sub_080AD918(void); extern void sub_0801E104(void); extern void MenuFadeIn(u32, u32); +extern void sub_080A57F4(void); #endif diff --git a/src/loadRoom.c b/src/loadRoom.c index c429264b..27946eb8 100644 --- a/src/loadRoom.c +++ b/src/loadRoom.c @@ -1,27 +1,93 @@ #include "global.h" -/* called when loading any room */ +#include "room.h" -void LoadRoomEntityList(); +void LoadRoomEntityList(EntityData* dat); s32 CheckGlobalFlag(u32 flag); -extern s32* GetCurrentRoomProperty(u8 unk); -extern void sub_0804B058(s32* unk); -extern void sub_0804B1AC(); +extern EntityData* GetCurrentRoomProperty(u32 unk); +extern void sub_0804B058(EntityData* dat); +extern void sub_0804B1AC(EntityData* dat); extern void sub_0801AC98(); +extern u32 sub_08049D1C(u32); +extern Entity* CreateEntity(EntityData*); +extern void* GetRoomProperty(u32, u32, u32); -void LoadRoom(void) - -{ +extern u32 gUnk_02017654; +extern u32* gUnk_080D50FC; +void LoadRoom(void) { s32 iVar1; s32* dat; - GetCurrentRoomProperty(1); - LoadRoomEntityList(); - GetCurrentRoomProperty(0); - LoadRoomEntityList(); + LoadRoomEntityList(GetCurrentRoomProperty(1)); + LoadRoomEntityList(GetCurrentRoomProperty(0)); - if (CheckGlobalFlag(21)) sub_0804B058(GetCurrentRoomProperty(2)); - GetCurrentRoomProperty(3); - sub_0804B1AC(); + if (CheckGlobalFlag(21)) + sub_0804B058(GetCurrentRoomProperty(2)); + + sub_0804B1AC(GetCurrentRoomProperty(3)); sub_0801AC98(); } + +void sub_0804B058(EntityData* dat) { + Entity* ent; + u32 uVar2; + + if ((dat != NULL) && (dat->entityType != 0xff)) { + uVar2 = 0; + do { + if ((uVar2 < 0x20) && ((dat->entityType & 0xf) == 3)) { + if (sub_08049D1C(uVar2) != 0) { + ent = CreateEntity(dat); + if ((ent != NULL) && ((ent->entityType).type == 3)) { + ent->field_0x6c = uVar2 | 0x80; + } + } + } else { + CreateEntity(dat); + } + uVar2++; + dat++; + } while (dat->entityType != 0xff); + } +} + +void sub_0804B0B0(u32 arg0, u32 arg1) +{ + LoadRoomEntityList(GetRoomProperty(arg0, arg1, 1)); +} + +void SetCurrentRoomPropertyList(u32 arg0, u32 arg1) +{ + u32** arr; + gUnk_02017654 = 0; + arr = &gUnk_080D50FC; + if (arr[arg0] != 0) { + gUnk_02017654 = arr[arg0][arg1]; + } +} + +void sub_0804B0E8(u32 arg0, u32 arg1) +{ + void (* func)(); + + func = (void (*)())GetRoomProperty(arg0, arg1, 4); + if (func != NULL) { + func(); + } +} + +// returns multiple types of data? +void* GetRoomProperty(u32 arg0, u32 arg1, u32 arg2) +{ + u32 temp; + u32** arr; + temp = 0; + arr = &gUnk_080D50FC; + if (arr[arg0] != NULL) { + temp = arr[arg0][arg1]; + if (temp != 0) { + temp = *(u32 *)(arg2 * 4 + temp); + } + } + return (void*)temp; +} \ No newline at end of file diff --git a/src/sub_080A554C.c b/src/sub_080A554C.c index d28668ce..5fb0db17 100644 --- a/src/sub_080A554C.c +++ b/src/sub_080A554C.c @@ -1,20 +1,26 @@ #include "global.h" +#include "menu.h" +#include "functions.h" + +extern void (*const gUnk_08128BF8[])(void); extern u8 gUnk_02000090; -u32 sub_080A554C(u32 param_1) - +u32 sub_080A554C(u32 arg0) { - u32 uVar1; + u32 i; - if (param_1 != 0) { - uVar1 = 0; - do { - if (param_1 == (&gUnk_02000090)[uVar1]) { - return uVar1; - } - uVar1 = uVar1 + 1; - } while (uVar1 < 17); + if (arg0 != 0) { + for (i = 0; i < 17; i++) { + if (arg0 == (&gUnk_02000090)[i]) + return i; + } } return 17; } + +void sub_080A5574(void) +{ + gUnk_08128BF8[gMenu.secret](); + sub_080A57F4(); +} \ No newline at end of file