sub_0804E3C4 matching

This is the function to load the fight for Simon's simulation.
This commit is contained in:
Ibot02 2020-08-21 12:08:18 +02:00
parent 6e53face64
commit 52d44007f0
3 changed files with 34 additions and 73 deletions

View File

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

View File

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

View File

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