Match sub_80A64A4

This commit is contained in:
Kermalis 2023-08-16 19:32:51 -04:00
parent cf4f529718
commit 254f034ea2
3 changed files with 53 additions and 115 deletions

View File

@ -5,120 +5,6 @@
.text
thumb_func_start sub_80A64A4
sub_80A64A4:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
ldr r0, _080A6508
ldr r0, [r0]
movs r1, 0x84
lsls r1, 1
adds r7, r0, r1
bl sub_80A6460
movs r0, 0
mov r8, r0
_080A64C0:
movs r1, 0x2
ldrsh r0, [r7, r1]
cmp r0, 0
ble _080A6568
ldrh r5, [r7]
mov r0, r8
adds r0, 0x1D
lsls r0, 16
lsrs r0, 16
mov r10, r0
mov r1, r8
lsls r0, r1, 20
movs r1, 0xE8
lsls r1, 17
adds r0, r1
lsrs r0, 16
mov r9, r0
movs r0, 0x80
lsls r0, 2
adds r1, r0, 0
adds r0, r5, 0
ands r0, r1
cmp r0, 0
beq _080A6514
ldr r0, _080A650C
ldr r1, _080A6510
bl OpenFileAndGetFileDataPtr
adds r6, r0, 0
movs r0, 0xFF
ands r0, r5
lsls r0, 6
ldr r1, [r6, 0x4]
adds r2, r1, r0
b _080A652A
.align 2, 0
_080A6508: .4byte gUnknown_3001B7C
_080A650C: .4byte gUnknown_81177EC
_080A6510: .4byte gMonsterFileArchive
_080A6514:
movs r0, 0xFF
ands r0, r5
lsls r0, 2
ldr r1, _080A6584
adds r0, r1
ldr r0, [r0]
ldr r1, _080A6588
bl OpenFileAndGetFileDataPtr
adds r6, r0, 0
ldr r2, [r6, 0x4]
_080A652A:
movs r1, 0x80
lsls r1, 5
adds r0, r1, 0
adds r1, r5, 0
ands r1, r0
lsls r1, 16
lsrs r1, 16
negs r1, r1
lsrs r4, r1, 31
movs r1, 0x80
lsls r1, 6
adds r0, r1, 0
ands r5, r0
cmp r5, 0
beq _080A654C
movs r0, 0x2
orrs r4, r0
_080A654C:
mov r0, r9
adds r1, r2, 0
movs r2, 0x10
bl sub_809971C
mov r0, r10
adds r1, r4, 0
bl sub_80997F4
cmp r6, 0
beq _080A6568
adds r0, r6, 0
bl CloseFile
_080A6568:
movs r0, 0x1
add r8, r0
adds r7, 0x4
mov r1, r8
cmp r1, 0x1
ble _080A64C0
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A6584: .4byte gUnknown_81178F4
_080A6588: .4byte gOrnamentFileArchive
thumb_func_end sub_80A64A4
thumb_func_start sub_80A658C
sub_80A658C:
push {r4,lr}

View File

@ -23,7 +23,7 @@ struct unkStruct_3001B7C_sub0
struct unkStruct_3001B7C_sub108
{
u16 unk0;
u16 unk2;
s16 unk2;
};
// size: 0x110
struct unkStruct_3001B7C

View File

@ -21,10 +21,13 @@ extern struct unkStruct_3001B7C *gUnknown_3001B7C;
extern const struct FileArchive gDungeonFileArchive;
// monster_sbin.s
extern const struct FileArchive gMonsterFileArchive;
// ornament_sbin.s
extern const struct FileArchive gOrnamentFileArchive;
// data_8115F5C.s
extern const u8 gUnknown_81177CC[];
extern const u8 gUnknown_81177D8[];
extern const u8 gUnknown_81177EC[];
extern const u8 *gUnknown_81178F4[];
// code_8098BDC.s
extern void sub_809971C(u16, u8 *, s16);
@ -126,4 +129,53 @@ void sub_80A6460(void)
}
CloseFile(file);
}
void sub_80A64A4(void)
{
u8 *r2;
u16 r4;
u32 r5;
struct OpenedFile *file;
struct unkStruct_3001B7C_sub108 *r7;
s32 i;
s16 r9;
u16 sl;
u16 flag;
u16 flag2;
r7 = gUnknown_3001B7C->unk108;
sub_80A6460();
for (i = 0; i < 2; i++, r7++)
{
if (r7->unk2 > 0) {
r5 = r7->unk0;
sl = i + 29;
r9 = 0x1D0 + i * 16;
flag = r5 & 0x200;
if (flag) {
file = OpenFileAndGetFileDataPtr(gUnknown_81177EC, &gMonsterFileArchive);
r2 = file->data + (r5 & 0xFF) * 0x40;
}
else {
file = OpenFileAndGetFileDataPtr((r5 & 0xFF)[gUnknown_81178F4], &gOrnamentFileArchive);
r2 = file->data;
}
flag2 = r5 & 0x1000;
r4 = flag2 != 0;
flag = r5 & 0x2000;
if (flag)
r4 |= 2;
sub_809971C(r9, r2, 16);
sub_80997F4(sl, r4);
if (file != NULL)
CloseFile(file);
}
}
}