From 254f034ea27e762a886eb00350a0c734aa124bba Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:32:51 -0400 Subject: [PATCH] Match sub_80A64A4 --- asm/ground_sprite.s | 114 ---------------------------------------- include/ground_sprite.h | 2 +- src/ground_sprite.c | 52 ++++++++++++++++++ 3 files changed, 53 insertions(+), 115 deletions(-) diff --git a/asm/ground_sprite.s b/asm/ground_sprite.s index 99234a1aa..499032aab 100644 --- a/asm/ground_sprite.s +++ b/asm/ground_sprite.s @@ -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} diff --git a/include/ground_sprite.h b/include/ground_sprite.h index b743cefc4..306be99a5 100644 --- a/include/ground_sprite.h +++ b/include/ground_sprite.h @@ -23,7 +23,7 @@ struct unkStruct_3001B7C_sub0 struct unkStruct_3001B7C_sub108 { u16 unk0; - u16 unk2; + s16 unk2; }; // size: 0x110 struct unkStruct_3001B7C diff --git a/src/ground_sprite.c b/src/ground_sprite.c index d3a56c348..8792e1e17 100644 --- a/src/ground_sprite.c +++ b/src/ground_sprite.c @@ -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); + } + } } \ No newline at end of file