diff --git a/asm/non_matching/sub_0804E3C4.inc b/asm/non_matching/sub_0804E3C4.inc deleted file mode 100644 index fcac78c4..00000000 --- a/asm/non_matching/sub_0804E3C4.inc +++ /dev/null @@ -1,68 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - movs r0, #5 - bl CheckGlobalFlag - rsbs r1, r0, #0 - orrs r1, r0 - lsrs r6, r1, #0x1f - movs r0, #6 - bl CheckGlobalFlag - cmp r0, #0 - beq _0804E3DE - movs r6, #2 -_0804E3DE: - movs r0, #0x55 - bl CheckGlobalFlag - cmp r0, #0 - beq _0804E3EA - movs r6, #3 -_0804E3EA: - bl Random - adds r4, r0, #0 - ldr r1, _0804E448 @ =gUnk_080F0D58 - lsls r0, r6, #2 - adds r0, r0, r1 - movs r5, #0x1f - adds r1, r4, #0 - ands r1, r5 - ldr r0, [r0] - adds r0, r0, r1 - ldrb r6, [r0] - ldr r1, _0804E44C @ =gUnk_080F0CB8 - movs r0, #0xf - ands r0, r6 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl LoadRoomEntityList - lsrs r6, r6, #4 - lsrs r4, r4, #8 - ldr r1, _0804E450 @ =gUnk_080F0E08 - lsls r0, r6, #2 - adds r0, r0, r1 - ands r4, r5 - ldr r0, [r0] - adds r0, r0, r4 - ldrb r6, [r0] - movs r0, #0xc6 - bl CheckLocalFlag - cmp r0, #0 - bne _0804E436 - movs r0, #0xc6 - bl SetLocalFlag - movs r6, #0xe -_0804E436: - lsls r0, r6, #3 - ldr r1, _0804E454 @ =gUnk_080F0E1C - adds r0, r0, r1 - bl sub_0804B3C4 - ldr r0, _0804E458 @ =0x80100000 - bl PlaySFX - pop {r4, r5, r6, pc} - .align 2, 0 -_0804E448: .4byte gUnk_080F0D58 -_0804E44C: .4byte gUnk_080F0CB8 -_0804E450: .4byte gUnk_080F0E08 -_0804E454: .4byte gUnk_080F0E1C -_0804E458: .4byte 0x80100000 - .syntax divided \ No newline at end of file diff --git a/include/functions.h b/include/functions.h index d85b2822..dc6b920a 100644 --- a/include/functions.h +++ b/include/functions.h @@ -118,7 +118,7 @@ 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_0804B29C(void*); extern void sub_08030118(u32); extern void sub_080575C8(u32); extern void sub_08057688(void); diff --git a/src/room.c b/src/room.c index cd8959f5..69d8ef95 100644 --- a/src/room.c +++ b/src/room.c @@ -10,7 +10,7 @@ #include "main.h" #include "structures.h" -void sub_0804B3C4(u32 arg0) { +void sub_0804B3C4(void* arg0) { sub_0804B29C(arg0); } @@ -4467,9 +4467,38 @@ u32 sub_0804E3B8() { return 1; } -NAKED +extern u8* gUnk_080F0D58[4]; +extern Entity* gUnk_080F0CB8[15]; +extern u8* gUnk_080F0E08[]; +extern struct { + u32 unk_00; + u32 unk_04; +} gUnk_080F0E1C[]; + void sub_0804E3C4() { - asm(".include \"asm/non_matching/sub_0804E3C4.inc\""); + u32 r; + u32 index; + u32 tmp; + tmp = CheckGlobalFlag(LV4_CLEAR); + index = (-tmp | tmp) >> 0x1F; + if (CheckGlobalFlag(LV5_CLEAR)) { + index = 2; + } + if (CheckGlobalFlag(GAMECLEAR)) { + index = 3; + } + r = Random(); + index = gUnk_080F0D58[index][r&0x1f]; + LoadRoomEntityList(gUnk_080F0CB8[index & 0xF]); + index >>= 4; + r >>= 8; + index = gUnk_080F0E08[index][r&0x1F]; + if (!CheckLocalFlag(0xC6)) { + SetLocalFlag(0xC6); + index = 0xE; + } + sub_0804B3C4(&gUnk_080F0E1C[index]); + PlaySFX(0x80100000); } u32 sub_0804E45C() { @@ -6552,4 +6581,4 @@ void sub_0804FF84(u32 arg0) { ((struct_02000000 * )0x02000000)->brightnessPref = arg0; gUsedPalettes = (u32)-1; -} \ No newline at end of file +}