From 9ed54037203a0eafd18b6a8fcd93a373e04a1e53 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 4 Jun 2025 09:09:16 +0200 Subject: [PATCH] sub_80A2FBC will be a nightmare to match --- asm/code_80A26CC_1.s | 170 ------------------------------------------- include/ground_map.h | 15 +++- src/code_80A26CC.c | 93 +++++++++++++++++++++++ 3 files changed, 106 insertions(+), 172 deletions(-) diff --git a/asm/code_80A26CC_1.s b/asm/code_80A26CC_1.s index 9b367c157..d474cbb7a 100644 --- a/asm/code_80A26CC_1.s +++ b/asm/code_80A26CC_1.s @@ -8,176 +8,6 @@ - thumb_func_start sub_80A2E64 -sub_80A2E64: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r7, r0, 0 - bl sub_80A2DD4 - ldr r0, _080A2FA4 - adds r1, r7, r0 - ldr r0, _080A2FA8 - strh r0, [r1] - movs r1, 0xA5 - lsls r1, 3 - adds r0, r7, r1 - movs r1, 0 - movs r2, 0 - strh r2, [r0] - movs r3, 0x89 - lsls r3, 3 - adds r0, r7, r3 - strb r1, [r0] - ldr r4, _080A2FAC - adds r0, r7, r4 - strb r1, [r0] - adds r3, 0x2 - adds r0, r7, r3 - strb r1, [r0] - adds r4, 0x2 - adds r0, r7, r4 - strb r1, [r0] - adds r3, 0x2 - adds r0, r7, r3 - strb r1, [r0] - adds r4, 0x2 - adds r0, r7, r4 - strb r1, [r0] - adds r3, r7, 0 - adds r4, 0x1F - adds r0, r7, r4 - str r2, [r0] - movs r2, 0x8E - lsls r2, 3 - adds r0, r7, r2 - strb r1, [r0] - adds r4, 0x5 - adds r0, r7, r4 - strb r1, [r0] - movs r0, 0 - movs r1, 0xD -_080A2ECA: - strh r0, [r3] - strh r0, [r3, 0x2] - str r0, [r3, 0x8] - str r0, [r3, 0x4] - subs r1, 0x1 - adds r3, 0x10 - cmp r1, 0 - bge _080A2ECA - movs r1, 0 - movs r2, 0xF8 - lsls r2, 2 - adds r0, r7, r2 - movs r2, 0x1 -_080A2EE4: - strb r1, [r0] - strb r1, [r0, 0x1] - strh r1, [r0, 0x2] - strh r1, [r0, 0x4] - str r1, [r0, 0x8] - str r1, [r0, 0xC] - str r1, [r0, 0x14] - str r1, [r0, 0x10] - str r1, [r0, 0x1C] - str r1, [r0, 0x18] - str r1, [r0, 0x20] - str r1, [r0, 0x24] - adds r0, 0x28 - subs r2, 0x1 - cmp r2, 0 - bge _080A2EE4 - ldr r3, _080A2FB0 - adds r0, r7, r3 - movs r4, 0 - ldrsh r0, [r0, r4] - lsls r0, 20 - lsrs r6, r0, 16 - movs r5, 0 - ldr r1, _080A2FB4 - adds r0, r7, r1 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r5, r0 - bge _080A2F78 - mov r10, r5 - add r4, sp, 0x4 - movs r3, 0xFF - mov r9, r3 -_080A2F26: - mov r0, r10 - str r0, [sp] - ldrb r0, [r4] - mov r1, r9 - orrs r0, r1 - strb r0, [r4] - ldrb r0, [r4, 0x1] - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x2] - orrs r0, r1 - strb r0, [r4, 0x2] - mov r2, r10 - strb r2, [r4, 0x3] - adds r0, r6, 0 - adds r1, r0, 0x1 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r1, [sp] - bl sub_8003810 - adds r5, 0x1 - mov r8, r5 - movs r5, 0xE -_080A2F56: - adds r0, r6, 0 - adds r1, r0, 0x1 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r1, [sp, 0x4] - bl sub_8003810 - subs r5, 0x1 - cmp r5, 0 - bge _080A2F56 - mov r5, r8 - ldr r3, _080A2FB4 - adds r0, r7, r3 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r5, r0 - blt _080A2F26 -_080A2F78: - adds r0, r7, 0 - movs r1, 0 - bl sub_80A3BB0 - movs r2, 0x91 - lsls r2, 3 - adds r0, r7, r2 - bl sub_80A3EB0 - ldr r3, _080A2FB8 - adds r1, r7, r3 - movs r0, 0x1 - strb r0, [r1] - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A2FA4: .4byte 0x00000444 -_080A2FA8: .4byte 0x0000ffff -_080A2FAC: .4byte 0x00000449 -_080A2FB0: .4byte 0x0000052c -_080A2FB4: .4byte 0x0000052e -_080A2FB8: .4byte 0x0000052a - thumb_func_end sub_80A2E64 - thumb_func_start sub_80A2FBC sub_80A2FBC: push {r4-r7,lr} diff --git a/include/ground_map.h b/include/ground_map.h index 95c6395cb..12fa74646 100644 --- a/include/ground_map.h +++ b/include/ground_map.h @@ -28,10 +28,19 @@ typedef struct SubStruct_3E0 s32 unk24; } SubStruct_3E0; +typedef struct SubStruct_488 +{ + u8 fill0[0x18]; + void (*unk18)(struct SubStruct_488 *); + u8 fill1C[0x84]; +} SubStruct_488; + // size: 0x18? typedef struct SubStruct_52C { - u8 fill0[8]; // 0x52C + s16 unk0; // 0x52C + s16 unk2; // 0x52E + u8 fill4[0x4]; // 0x530 s16 unk8; // 0x534 s16 unkA; // 0x536 s16 unkC; // 0x538 @@ -70,7 +79,9 @@ typedef struct unkStruct_3001B70 s32 unk46C; u8 unk470; u8 unk471; - u8 fill472[0x52A-0x472]; + u8 fill472[0x488-0x472]; + struct SubStruct_488 unk488; + u16 unk528; u8 unk52A; SubStruct_52C unk52C; void *unk544; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index 52f8f2281..6b853f58c 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -463,10 +463,14 @@ UNUSED static const u8 *sub_80A2B28(u16 r0) return sub_80A2B18(GetScriptVarValue(NULL, GROUND_PLACE)); } +// TODO: Figure out if a new file starts here + #include "ground_map.h" #include "text_1.h" #include "memory.h" #include "file_system.h" +#include "code_8002774.h" +#include "code_801D9E4.h" extern void sub_80A456C(unkStruct_3001B70 *, u32, const PixelPos *); extern const PixelPos gUnknown_81172B8; @@ -543,6 +547,8 @@ void sub_80A2B40(unkStruct_3001B70 *mapPtr, const SubStruct_52C *a1) } void sub_80A2DD4(unkStruct_3001B70 *mapPtr); +void sub_80A3BB0(unkStruct_3001B70 *mapPtr, s32 a0); +void sub_80A3EB0(SubStruct_488 *mapSubstructPtr); void sub_80A2D00(unkStruct_3001B70 *mapPtr) { @@ -588,3 +594,90 @@ void sub_80A2DD4(unkStruct_3001B70 *mapPtr) TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk434); TRY_CLOSE_FILE_AND_SET_NULL(mapPtr->unk438); } + +extern void sub_8003810(u32 param_1, struct S param_2); + +void sub_80A2E64(unkStruct_3001B70 *mapPtr) +{ + u16 r6; + s32 i, j; + SubStruct_0 *unk0Ptr; + s32 unk0Id, unk3E0Id; + + sub_80A2DD4(mapPtr); + mapPtr->unk444 = -1; + mapPtr->unk528 = 0; + mapPtr->unk448 = 0; + mapPtr->unk449 = 0; + mapPtr->unk44A = 0; + mapPtr->unk44B = 0; + mapPtr->unk44C = 0; + mapPtr->unk44D = 0; + unk0Ptr = &mapPtr->unk0[0]; + mapPtr->unk46C = 0; + mapPtr->unk470 = 0; + mapPtr->unk471 = 0; + + for (unk0Id = 0; unk0Id < UNK_0_ARR_COUNT; unk0Id++, unk0Ptr++) { + unk0Ptr->unk0 = 0; + unk0Ptr->unk2 = 0; + unk0Ptr->unk8 = 0; + unk0Ptr->unk4 = 0; + } + + for (unk3E0Id = 0; unk3E0Id < UNK_3E0_ARR_COUNT; unk3E0Id++) { + SubStruct_3E0 *unkPtr = &mapPtr->unk3E0[unk3E0Id]; + unkPtr->unk0 = 0; + unkPtr->unk1 = 0; + unkPtr->unk2 = 0; + unkPtr->unk4 = 0; + unkPtr->unk8 = NULL; + unkPtr->unkC = 0; + unkPtr->unk12 = 0; + unkPtr->unk10 = 0; + unkPtr->unk1C = 0; + unkPtr->unk14 = 0; + unkPtr->unk20 = 0; + unkPtr->unk24 = 0; + } + + r6 = mapPtr->unk52C.unk0 * 16; + for (i = 0; i < mapPtr->unk52C.unk2; i++) { + struct S str1 = {0}; + struct S str2 = {0xFF, 0xFF, 0xFF, 0}; + + sub_8003810(r6++, str1); + for (j = 0; j < 15; j++) { + sub_8003810(r6++, str2); + } + } + + sub_80A3BB0(mapPtr, 0); + sub_80A3EB0(&mapPtr->unk488); + mapPtr->unk52A = 1; +} + +extern const struct unkStruct_81188F0 gUnknown_81188F0[10]; +extern const FileArchive gGroundFileArchive; + +/* +void sub_80A2FBC(unkStruct_3001B70 *mapPtr, s32 a1_) +{ + const struct unkStruct_81188F0 *dataPtr; + s32 a1 = (s16) a1_; + + if (a1 == -1) { + sub_80A2E64(mapPtr); + return; + } + + sub_80A2DD4(mapPtr); + mapPtr->unk444 = a1; + dataPtr = &gUnknown_81188F0[a1]; + mapPtr->unk430 = OpenFileAndGetFileDataPtr(dataPtr->text1, &gGroundFileArchive); + mapPtr->unk434 = OpenFileAndGetFileDataPtr(dataPtr->text2, &gGroundFileArchive); + mapPtr->unk438 = OpenFileAndGetFileDataPtr(dataPtr->text3, &gGroundFileArchive); +} +*/ + +//