diff --git a/asm/code_80A26CC_1.s b/asm/code_80A26CC_1.s index b05cd0c45..1d0f77a57 100644 --- a/asm/code_80A26CC_1.s +++ b/asm/code_80A26CC_1.s @@ -6,245 +6,6 @@ .text - - - thumb_func_start sub_80A3B80 -sub_80A3B80: - push {r4,lr} - adds r3, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r4, _080A3BA8 - adds r0, r3, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080A3BA2 - adds r4, 0x4 - adds r0, r3, r4 - strb r1, [r0] - ldr r1, _080A3BAC - adds r0, r3, r1 - strb r2, [r0] -_080A3BA2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080A3BA8: .4byte 0x0000046c -_080A3BAC: .4byte 0x00000471 - thumb_func_end sub_80A3B80 - - thumb_func_start sub_80A3BB0 -sub_80A3BB0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - lsls r1, 16 - asrs r1, 16 - adds r6, r1, 0 - movs r0, 0x91 - lsls r0, 3 - adds r0, r5 - mov r8, r0 - cmp r1, 0 - blt _080A3BD4 - cmp r1, 0x1 - ble _080A3BD4 - cmp r1, 0x4 - ble _080A3C00 -_080A3BD4: - ldr r1, _080A3BFC - adds r0, r5, r1 - movs r1, 0x1 - str r1, [r0] - movs r2, 0xA7 - lsls r2, 3 - adds r0, r5, r2 - movs r1, 0 - ldrsh r3, [r0, r1] - movs r0, 0 - cmp r6, 0x1 - bne _080A3BEE - movs r0, 0x1 -_080A3BEE: - str r0, [sp] - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl sub_80A3D40 - b _080A3C48 - .align 2, 0 -_080A3BFC: .4byte 0x00000474 -_080A3C00: - ldr r2, _080A3C88 - adds r0, r5, r2 - movs r7, 0x2 - str r7, [r0] - movs r0, 0xA7 - lsls r0, 3 - adds r4, r5, r0 - movs r2, 0 - ldrsh r0, [r4, r2] - subs r3, r0, 0x1 - movs r0, 0 - cmp r1, 0x4 - bne _080A3C1C - movs r0, 0x1 -_080A3C1C: - str r0, [sp] - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl sub_80A3D40 - movs r1, 0x9B - lsls r1, 3 - adds r0, r5, r1 - movs r1, 0 - ldrsh r2, [r4, r1] - subs r2, 0x1 - adds r3, r7, 0 - eors r3, r6 - negs r1, r3 - orrs r1, r3 - lsrs r1, 31 - str r1, [sp] - adds r1, r5, 0 - movs r3, 0x1 - bl sub_80A3D40 -_080A3C48: - movs r6, 0 - ldr r2, _080A3C88 - adds r0, r5, r2 - ldr r0, [r0] - cmp r6, r0 - bge _080A3CF0 - movs r0, 0x8F - lsls r0, 3 - adds r7, r5, r0 - mov r4, r8 -_080A3C5C: - adds r0, r5, 0 - adds r1, r6, 0 - ldr r2, _080A3C8C - bl sub_80A456C - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080A3C72 - cmp r0, 0x2 - beq _080A3CB4 -_080A3C72: - movs r2, 0 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _080A3C94 - cmp r0, 0x1 - ble _080A3C82 - cmp r0, 0x2 - beq _080A3C9C -_080A3C82: - ldr r0, _080A3C90 - b _080A3CD6 - .align 2, 0 -_080A3C88: .4byte 0x00000474 -_080A3C8C: .4byte gUnknown_8117314 -_080A3C90: .4byte sub_80A3EBC -_080A3C94: - ldr r0, _080A3C98 - b _080A3CD6 - .align 2, 0 -_080A3C98: .4byte sub_80A3EF4 -_080A3C9C: - ldrb r0, [r4, 0x6] - ldr r1, _080A3CAC - cmp r0, 0 - beq _080A3CA6 - ldr r1, _080A3CB0 -_080A3CA6: - str r1, [r4, 0x18] - b _080A3CD8 - .align 2, 0 -_080A3CAC: .4byte sub_80A4088 -_080A3CB0: .4byte sub_80A41C4 -_080A3CB4: - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080A3CCC - cmp r0, 0x1 - ble _080A3CC4 - cmp r0, 0x2 - beq _080A3CD4 -_080A3CC4: - ldr r0, _080A3CC8 - b _080A3CD6 - .align 2, 0 -_080A3CC8: .4byte sub_80A3ED4 -_080A3CCC: - ldr r0, _080A3CD0 - b _080A3CD6 - .align 2, 0 -_080A3CD0: .4byte sub_80A3F94 -_080A3CD4: - ldr r0, _080A3D34 -_080A3CD6: - str r0, [r4, 0x18] -_080A3CD8: - adds r0, r4, 0 - adds r1, r7, 0 - bl sub_80A3E14 - adds r7, 0x8 - adds r4, 0x50 - adds r6, 0x1 - ldr r2, _080A3D38 - adds r0, r5, r2 - ldr r0, [r0] - cmp r6, r0 - blt _080A3C5C -_080A3CF0: - ldr r1, _080A3D38 - adds r0, r5, r1 - ldr r6, [r0] - cmp r6, 0x1 - bgt _080A3D26 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 4 - mov r2, r8 - adds r4, r0, r2 -_080A3D04: - adds r0, r5, 0 - adds r1, r6, 0 - ldr r2, _080A3D3C - bl sub_80A456C - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0 - bl sub_80A3D40 - adds r4, 0x50 - adds r6, 0x1 - cmp r6, 0x1 - ble _080A3D04 -_080A3D26: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080A3D34: .4byte sub_80A4358 -_080A3D38: .4byte 0x00000474 -_080A3D3C: .4byte gUnknown_8117314 - thumb_func_end sub_80A3BB0 - thumb_func_start sub_80A3D40 sub_80A3D40: push {r4-r7,lr} diff --git a/include/ground_map.h b/include/ground_map.h index 4ec83ee36..1e51acbb5 100644 --- a/include/ground_map.h +++ b/include/ground_map.h @@ -3,6 +3,7 @@ #include "structs/str_file_system.h" #include "structs/str_202EE8C.h" +#include "structs/str_position.h" typedef struct SubStruct_0 { @@ -31,9 +32,17 @@ typedef struct SubStruct_3E0 typedef struct SubStruct_488 { - u8 fill0[0x18]; + s16 unk0; + u16 unk2; + s16 unk4; + u8 unk6; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; void (*unk18)(struct SubStruct_488 *); - u8 fill1C[0x84]; + s32 unk1C; + u8 fill1C[0x30]; } SubStruct_488; // size: 0x18? @@ -68,6 +77,7 @@ typedef struct SubStruct_448 #define UNK_0_ARR_COUNT 14 #define UNK_E0_ARR_COUNT 32 #define UNK_3E0_ARR_COUNT 2 +#define UNK_488_ARR_COUNT 2 #define UNK_54C_ARR_COUNT 2 #define UNK_545_UNK6_ARR_COUNT 4 @@ -99,8 +109,9 @@ typedef struct unkStruct_3001B70 const void *unk46C; u8 unk470; u8 unk471; - u8 fill472[0x488-0x472]; - struct SubStruct_488 unk488; + s32 unk474; + PixelPos unk478[UNK_488_ARR_COUNT]; + struct SubStruct_488 unk488[UNK_488_ARR_COUNT]; u16 unk528; u8 unk52A; SubStruct_52C unk52C; diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index eb4381a38..fc5711291 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -463,7 +463,7 @@ UNUSED static const u8 *sub_80A2B28(u16 r0) return sub_80A2B18(GetScriptVarValue(NULL, GROUND_PLACE)); } -// TODO: Figure out if a new file starts here +// TODO: Figure out if a new file starts here. Edit: new file indeed starts here #include "ground_map.h" #include "text_1.h" @@ -657,7 +657,7 @@ void sub_80A2E64(unkStruct_3001B70 *mapPtr) } sub_80A3BB0(mapPtr, 0); - sub_80A3EB0(&mapPtr->unk488); + sub_80A3EB0(mapPtr->unk488); mapPtr->unk52A = 1; } @@ -859,7 +859,7 @@ void sub_80A2FBC(unkStruct_3001B70 *mapPtr, s32 a1_) } sub_80A3BB0(mapPtr, 0); - sub_80A3EB0(&mapPtr->unk488); + sub_80A3EB0(mapPtr->unk488); mapPtr->unk52A = 1; } @@ -996,7 +996,7 @@ void sub_80A3440(unkStruct_3001B70 *mapPtr, s32 a1_, DungeonLocation *dungLoc, s sub3E0->unk24 = 0; } sub_80A3BB0(mapPtr, 0); - sub_80A3EB0(&mapPtr->unk488); + sub_80A3EB0(mapPtr->unk488); mapPtr->unk52A = 1; // bad sp alloc for compiler generated variables... ASM_MATCH_TRICK(mapPtr_454->unk6[0]); @@ -1149,4 +1149,89 @@ const u8 *sub_80A3908(u16 **dstArray, const void *src_, SubStruct_52C *a2, SubSt return src; } +void sub_80A3B80(unkStruct_3001B70 *mapPtr, u8 a1, u8 a2) +{ + if (mapPtr->unk46C != NULL) { + mapPtr->unk470 = a1; + mapPtr->unk471 = a2; + } +} + +extern const PixelPos gUnknown_8117314; +void sub_80A3D40(SubStruct_488 *a0, unkStruct_3001B70 *mapPtr, s32 a2, s32 a3, bool8 a4); +void sub_80A3E14(SubStruct_488 *a0, PixelPos *a1); +void sub_80A3EBC(SubStruct_488 *a0); +void sub_80A3EF4(SubStruct_488 *a0); +void sub_80A4088(SubStruct_488 *a0); +void sub_80A41C4(SubStruct_488 *a0); +void sub_80A3ED4(SubStruct_488 *a0); +void sub_80A3F94(SubStruct_488 *a0); +void sub_80A4358(SubStruct_488 *a0); + +void sub_80A3BB0(unkStruct_3001B70 *mapPtr, s32 a0_) +{ + s32 i; + // s16 memes strike yet again + s32 a0Match = (s16) a0_; + s32 a0 = a0Match; + + SubStruct_488 *map488 = mapPtr->unk488; + + switch (a0) { + default: + case 0: + case 1: + mapPtr->unk474 = 1; + sub_80A3D40(&map488[0], mapPtr, 0, mapPtr->unk52C.unkC, (a0 == 1)); + break; + case 2: + case 3: + case 4: + mapPtr->unk474 = 2; + sub_80A3D40(&map488[0], mapPtr, 0, mapPtr->unk52C.unkC - 1, (a0 == 4)); + sub_80A3D40(&map488[1], mapPtr, mapPtr->unk52C.unkC - 1, 1, (a0 != 2)); + break; + } + + for (i = 0; i < mapPtr->unk474; i++) { + sub_80A456C(mapPtr, i, &gUnknown_8117314); + switch (map488[i].unk4) { + default: + case 1: + switch (map488[i].unk0) { + default: + case 0: + map488[i].unk18 = sub_80A3EBC; + break; + case 1: + map488[i].unk18 = sub_80A3EF4; + break; + case 2: + map488[i].unk18 = (map488[i].unk6 != 0) ? sub_80A41C4 : sub_80A4088; + break; + } + break; + case 2: + switch (map488[i].unk0) { + default: + case 0: + map488[i].unk18 = sub_80A3ED4; + break; + case 1: + map488[i].unk18 = sub_80A3F94; + break; + case 2: + map488[i].unk18 = sub_80A4358; + break; + } + break; + } + sub_80A3E14(&map488[i], &mapPtr->unk478[i]); + } + for (i = mapPtr->unk474; i < UNK_488_ARR_COUNT; i++) { + sub_80A456C(mapPtr, i, &gUnknown_8117314); + sub_80A3D40(&map488[i], mapPtr, 0, 0, FALSE); + } +} + //