loadRoom.c

This commit is contained in:
theo3 2020-07-17 19:00:04 -07:00
parent db02fad00a
commit 6328c148d2
9 changed files with 107 additions and 168 deletions

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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;
}

View File

@ -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();
}