diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-04 20:38:46 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-04 20:38:46 -0500 |
commit | 70993fe308b327c0bf3b6947871e1432de9eca37 (patch) | |
tree | 96aa57083e31b3267ddb3ca24e972adf5b17332b | |
parent | a54c1b0664f9762298b068ff5bd1ddfed9eef62b (diff) |
through sub_80C2604
-rw-r--r-- | asm/region_map.s | 391 | ||||
-rw-r--r-- | src/region_map.c | 168 |
2 files changed, 139 insertions, 420 deletions
diff --git a/asm/region_map.s b/asm/region_map.s index afa6ecdb9..e8897693a 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,397 +5,6 @@ .text - thumb_func_start sub_80C2344 -sub_80C2344: @ 80C2344 - push {lr} - ldr r0, _080C2360 @ =gUnknown_20399E0 - ldr r0, [r0] - ldr r1, _080C2364 @ =0x00000ccd - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bls _080C2356 - b _080C249C -_080C2356: - lsls r0, 2 - ldr r1, _080C2368 @ =_080C236C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C2360: .4byte gUnknown_20399E0 -_080C2364: .4byte 0x00000ccd -_080C2368: .4byte _080C236C - .align 2, 0 -_080C236C: - .4byte _080C2390 - .4byte _080C23B0 - .4byte _080C23D0 - .4byte _080C23F0 - .4byte _080C2410 - .4byte _080C2430 - .4byte _080C2450 - .4byte _080C2468 - .4byte _080C2484 -_080C2390: - ldr r0, _080C23A8 @ =gUnknown_83F12CC - ldr r1, _080C23AC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1] - bl LZ77UnCompWram - movs r0, 0 - movs r1, 0x4 - movs r2, 0x4 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23A8: .4byte gUnknown_83F12CC -_080C23AC: .4byte gUnknown_20399E0 -_080C23B0: - ldr r0, _080C23C8 @ =gUnknown_83F1550 - ldr r1, _080C23CC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x4] - bl LZ77UnCompWram - movs r0, 0x1 - movs r1, 0x5 - movs r2, 0x5 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23C8: .4byte gUnknown_83F1550 -_080C23CC: .4byte gUnknown_20399E0 -_080C23D0: - ldr r0, _080C23E8 @ =gUnknown_83F1738 - ldr r1, _080C23EC @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x8] - bl LZ77UnCompWram - movs r0, 0x2 - movs r1, 0x6 - movs r2, 0x6 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C23E8: .4byte gUnknown_83F1738 -_080C23EC: .4byte gUnknown_20399E0 -_080C23F0: - ldr r0, _080C2408 @ =gUnknown_83F13EC - ldr r1, _080C240C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0xC] - bl LZ77UnCompWram - movs r0, 0x3 - movs r1, 0x7 - movs r2, 0x7 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2408: .4byte gUnknown_83F13EC -_080C240C: .4byte gUnknown_20399E0 -_080C2410: - ldr r0, _080C2428 @ =gUnknown_83F1640 - ldr r1, _080C242C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x10] - bl LZ77UnCompWram - movs r0, 0x4 - movs r1, 0x8 - movs r2, 0x8 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2428: .4byte gUnknown_83F1640 -_080C242C: .4byte gUnknown_20399E0 -_080C2430: - ldr r0, _080C2448 @ =gUnknown_83F1804 - ldr r1, _080C244C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r1, [r1, 0x14] - bl LZ77UnCompWram - movs r0, 0x5 - movs r1, 0x9 - movs r2, 0x9 - bl sub_80C210C - b _080C24A0 - .align 2, 0 -_080C2448: .4byte gUnknown_83F1804 -_080C244C: .4byte gUnknown_20399E0 -_080C2450: - ldr r0, _080C2460 @ =gUnknown_83F0330 - ldr r1, _080C2464 @ =gUnknown_20399E0 - ldr r1, [r1] - adds r1, 0x18 - bl LZ77UnCompWram - b _080C24A0 - .align 2, 0 -_080C2460: .4byte gUnknown_83F0330 -_080C2464: .4byte gUnknown_20399E0 -_080C2468: - ldr r0, _080C2478 @ =gUnknown_83F0E0C - ldr r1, _080C247C @ =gUnknown_20399E0 - ldr r1, [r1] - ldr r2, _080C2480 @ =0x00000818 - adds r1, r2 - bl LZ77UnCompWram - b _080C24A0 - .align 2, 0 -_080C2478: .4byte gUnknown_83F0E0C -_080C247C: .4byte gUnknown_20399E0 -_080C2480: .4byte 0x00000818 -_080C2484: - ldr r0, _080C2498 @ =gUnknown_20399E0 - ldr r1, [r0] - adds r1, 0x18 - movs r2, 0x80 - lsls r2, 4 - movs r0, 0x1 - movs r3, 0 - bl LoadBgTiles - b _080C24A0 - .align 2, 0 -_080C2498: .4byte gUnknown_20399E0 -_080C249C: - movs r0, 0x1 - b _080C24B0 -_080C24A0: - ldr r0, _080C24B4 @ =gUnknown_20399E0 - ldr r1, [r0] - ldr r0, _080C24B8 @ =0x00000ccd - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C24B0: - pop {r1} - bx r1 - .align 2, 0 -_080C24B4: .4byte gUnknown_20399E0 -_080C24B8: .4byte 0x00000ccd - thumb_func_end sub_80C2344 - - thumb_func_start sub_80C24BC -sub_80C24BC: @ 80C24BC - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080C252C @ =gUnknown_20399E0 - ldr r3, [r0] - ldr r0, [r3] - ldr r2, _080C2530 @ =0x00000404 - adds r0, r2 - ldrh r0, [r0] - adds r0, 0x8 - lsls r0, 16 - ldr r4, _080C2534 @ =0xffff0000 - ldr r5, _080C2538 @ =0x0000ffff - lsrs r0, 16 - movs r1, 0x80 - lsls r1, 13 - orrs r0, r1 - str r0, [sp] - ldr r0, [r3, 0xC] - adds r0, r2 - ldrh r1, [r0] - subs r1, 0x8 - lsls r1, 16 - lsrs r1, 16 - ldr r0, [sp, 0x4] - ands r0, r4 - orrs r0, r1 - ands r0, r5 - movs r1, 0xA0 - lsls r1, 16 - orrs r0, r1 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - bl sub_80C4C2C - movs r0, 0x12 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0x10 - bl sub_80C4C88 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C252C: .4byte gUnknown_20399E0 -_080C2530: .4byte 0x00000404 -_080C2534: .4byte 0xffff0000 -_080C2538: .4byte 0x0000ffff - thumb_func_end sub_80C24BC - - thumb_func_start sub_80C253C -sub_80C253C: @ 80C253C - push {lr} - sub sp, 0x8 - ldr r0, _080C258C @ =gUnknown_83F1C34 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - bl sub_80C4BE4 - movs r0, 0x2 - movs r1, 0x29 - movs r2, 0x80 - bl sub_80C4C2C - ldr r0, _080C2590 @ =gUnknown_20399E0 - ldr r0, [r0] - movs r1, 0xCD - lsls r1, 4 - adds r0, r1 - ldrb r0, [r0] - bl sub_80C4C48 - movs r0, 0x37 - movs r1, 0 - bl sub_80C4C74 - movs r0, 0x12 - bl sub_80C4C88 - movs r0, 0 - mov r1, sp - bl sub_80C4CF0 - movs r0, 0 - movs r1, 0 - bl sub_80C4C9C - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080C258C: .4byte gUnknown_83F1C34 -_080C2590: .4byte gUnknown_20399E0 - thumb_func_end sub_80C253C - - thumb_func_start sub_80C2594 -sub_80C2594: @ 80C2594 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C25B0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080C25B4 @ =gUnknown_20399E0 - ldr r0, [r0] - ldr r2, _080C25B8 @ =0x00000cc8 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] - bx lr - .align 2, 0 -_080C25B0: .4byte gTasks -_080C25B4: .4byte gUnknown_20399E0 -_080C25B8: .4byte 0x00000cc8 - thumb_func_end sub_80C2594 - - thumb_func_start sub_80C25BC -sub_80C25BC: @ 80C25BC - push {r4-r6,lr} - bl sub_80C2604 - movs r5, 0 - ldr r6, _080C2600 @ =gUnknown_20399E0 -_080C25C6: - ldr r0, [r6] - lsls r4, r5, 2 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080C25DE - bl Free - ldr r0, [r6] - adds r0, r4 - movs r1, 0 - str r1, [r0] -_080C25DE: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080C25C6 - ldr r4, _080C2600 @ =gUnknown_20399E0 - ldr r0, [r4] - cmp r0, 0 - beq _080C25F8 - bl Free - movs r0, 0 - str r0, [r4] -_080C25F8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C2600: .4byte gUnknown_20399E0 - thumb_func_end sub_80C25BC - - thumb_func_start sub_80C2604 -sub_80C2604: @ 80C2604 - push {r4-r7,lr} - movs r5, 0 - ldr r7, _080C2670 @ =gUnknown_20399E0 - movs r6, 0x80 - lsls r6, 3 -_080C260E: - ldr r2, [r7] - lsls r4, r5, 2 - adds r2, r4 - ldr r1, [r2] - adds r0, r1, r6 - ldr r0, [r0] - ldrh r0, [r0, 0x20] - ldr r3, _080C2674 @ =0x00000404 - adds r1, r3 - strh r0, [r1] - ldr r1, [r2] - adds r0, r1, r6 - ldr r0, [r0] - ldrh r0, [r0, 0x22] - adds r3, 0x2 - adds r1, r3 - strh r0, [r1] - ldr r0, [r2] - adds r0, r6 - ldr r0, [r0] - cmp r0, 0 - beq _080C2660 - bl DestroySprite - ldr r0, [r7] - adds r0, r4 - ldr r0, [r0] - movs r1, 0x81 - lsls r1, 3 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r7] - adds r0, r4 - ldr r0, [r0] - ldr r3, _080C2678 @ =0x0000040a - adds r0, r3 - ldrh r0, [r0] - bl FreeSpritePaletteByTag -_080C2660: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _080C260E - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C2670: .4byte gUnknown_20399E0 -_080C2674: .4byte 0x00000404 -_080C2678: .4byte 0x0000040a - thumb_func_end sub_80C2604 - thumb_func_start sub_80C267C sub_80C267C: @ 80C267C push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index ff4262db5..c8b60cc36 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -125,11 +125,21 @@ struct UnkStruct_20399E0_000 struct UnkStruct_20399E0 { struct UnkStruct_20399E0_000 * field_000[6]; - u8 filler_018[0xCB0]; + u16 field_018[0x400]; + u16 field_818[0x258]; TaskFunc field_CC8; - u8 filler_CCC[0x8]; + u8 field_CCC; + u8 field_CCD; + u8 filler_CCE[2]; + u8 field_CD0; }; // size = 0xCD4 +#define FREE_IF_NOT_NULL(ptr) ({ \ + if (ptr) { \ + FREE_AND_SET_NULL(ptr); \ + } \ +}) + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; @@ -180,36 +190,37 @@ void sub_80C1E14(u8 taskId); void sub_80C1E94(void); void sub_80C1E78(u8 bgId, const u16 * tilemap); bool8 sub_80C1F80(bool8 a0); -void sub_80C4AAC(u8 a0); -void sub_80C4BE4(void); -void sub_80C4C2C(u8 a0, u16 a1, u16 a2); -void sub_80C4C48(u16 a0); -void sub_80C4C5C(u16 a0); -void sub_80C4C74(u16 a0, u16 a1); -void sub_80C4C88(u16 a0); -void sub_80C4C9C(u8 a0, u8 a1); -void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C2208(u8 taskId, TaskFunc taskFunc); void sub_80C24BC(void); void sub_80C267C(u8 taskId); void sub_80C25BC(void); +void sub_80C2604(void); void sub_80C2C1C(u8 taskId); void sub_80C3008(u16 a0, u16 a1); void sub_80C3154(u8 a0); void sub_80C3178(void); void sub_80C3188(void); -u8 sub_80C3AC8(u8 a0); u8 sub_80C3400(void); +u16 sub_80C3520(void); +u8 sub_80C3AC8(u8 a0); u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3); void sub_80C41D8(u16 a0, u16 a1); void sub_80C4324(u8 a0); void sub_80C4398(u8 a0, u8 taskId, TaskFunc taskFunc); void sub_80C4348(void); -u16 sub_80C3520(void); void sub_80C48BC(u8 a0, u8 a1, u8 a2); void sub_80C4960(u8 a0, u8 a1, u8 a2); void sub_80C4A04(void); void sub_80C4B30(u8 a0); +void sub_80C4AAC(u8 a0); +void sub_80C4BE4(void); +void sub_80C4C2C(u8 a0, u16 a1, u16 a2); +void sub_80C4C48(u16 a0); +void sub_80C4C5C(u16 a0); +void sub_80C4C74(u16 a0, u16 a1); +void sub_80C4C88(u16 a0); +void sub_80C4C9C(u8 a0, u8 a1); +void sub_80C4CF0(u8 a0, const struct UnkStruct_80C4CF0 *a1); void sub_80C4D30(void); void sub_80C4E18(const u8 *str); void sub_80C4E74(const u8 *str); @@ -227,6 +238,8 @@ extern const u16 gUnknown_83EF3A4[]; extern const u32 gUnknown_83EF3C4[]; extern const u32 gUnknown_83EF450[]; extern const u32 gUnknown_83EF61C[]; +extern const u32 gUnknown_83F0330[]; +extern const u32 gUnknown_83F0E0C[]; extern const u32 gUnknown_83F0580[]; extern const u32 gUnknown_83F089C[]; extern const u32 gUnknown_83F0AFC[]; @@ -235,6 +248,12 @@ extern const u32 gUnknown_83F0CF0[]; extern const u32 gUnknown_83F0F1C[]; extern const u32 gUnknown_83F1084[]; extern const u32 gUnknown_83F1190[]; +extern const u32 gUnknown_83F12CC[]; +extern const u32 gUnknown_83F13EC[]; +extern const u32 gUnknown_83F1550[]; +extern const u32 gUnknown_83F1640[]; +extern const u32 gUnknown_83F1738[]; +extern const u32 gUnknown_83F1804[]; extern const u32 gUnknown_83F1978[]; extern const u32 gUnknown_83F19A0[]; extern const struct BgTemplate gUnknown_83F1A50[4]; @@ -250,6 +269,7 @@ extern const union AnimCmd *const gUnknown_83F1B38[]; extern const struct UnkStruct_83F1B3C gUnknown_83F1B3C[]; extern const struct OamData gUnknown_83F1C20; extern const union AnimCmd *const gUnknown_83F1C30[]; +extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const u8 *const gUnknown_83F1CAC[]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) @@ -646,18 +666,12 @@ void sub_80C0820(u8 taskId) SetMainCallback2(gMain.savedCallback); else SetMainCallback2(gUnknown_20399D4->field_47BC); - if (gUnknown_20399D4 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D4); - } + FREE_IF_NOT_NULL(gUnknown_20399D4); } void sub_80C0898(void) { - if (gUnknown_20399D4 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D4); - } + FREE_IF_NOT_NULL(gUnknown_20399D4); } void sub_80C08B4(void) @@ -1036,10 +1050,7 @@ void sub_80C1280(u8 taskId) sub_80C0AB8(); sub_80C0B9C(); sub_80C4CF0(0, &gUnknown_83F1B0C[2]); - if (gUnknown_20399D8 != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399D8); - } + FREE_IF_NOT_NULL(gUnknown_20399D8); } bool8 sub_80C12EC(void) @@ -1418,10 +1429,7 @@ void sub_80C1E14(u8 taskId) sub_80C0AB8(); sub_80C0B9C(); sub_80C4E74(gUnknown_8418E8D); - if (gUnknown_20399DC != NULL) - { - FREE_AND_SET_NULL(gUnknown_20399DC); - } + FREE_IF_NOT_NULL(gUnknown_20399DC); } void sub_80C1E78(u8 bgId, const u16 * tilemap) @@ -1568,3 +1576,105 @@ void sub_80C22C4(u8 a0, bool8 a1) gUnknown_20399E0->field_000[a0]->field_400->invisible = a1; } } + +bool8 sub_80C2344(void) +{ + switch (gUnknown_20399E0->field_CCD) + { + case 0: + LZ77UnCompWram(gUnknown_83F12CC, gUnknown_20399E0->field_000[0]->field_000); + sub_80C210C(0, 4, 4); + break; + case 1: + LZ77UnCompWram(gUnknown_83F1550, gUnknown_20399E0->field_000[1]->field_000); + sub_80C210C(1, 5, 5); + break; + case 2: + LZ77UnCompWram(gUnknown_83F1738, gUnknown_20399E0->field_000[2]->field_000); + sub_80C210C(2, 6, 6); + break; + case 3: + LZ77UnCompWram(gUnknown_83F13EC, gUnknown_20399E0->field_000[3]->field_000); + sub_80C210C(3, 7, 7); + break; + case 4: + LZ77UnCompWram(gUnknown_83F1640, gUnknown_20399E0->field_000[4]->field_000); + sub_80C210C(4, 8, 8); + break; + case 5: + LZ77UnCompWram(gUnknown_83F1804, gUnknown_20399E0->field_000[5]->field_000); + sub_80C210C(5, 9, 9); + break; + case 6: + LZ77UnCompWram(gUnknown_83F0330, gUnknown_20399E0->field_018); + break; + case 7: + LZ77UnCompWram(gUnknown_83F0E0C, gUnknown_20399E0->field_818); + break; + case 8: + LoadBgTiles(1, gUnknown_20399E0->field_018, BG_SCREEN_SIZE, 0x000); + break; + default: + return TRUE; + } + gUnknown_20399E0->field_CCD++; + return FALSE; +} + +void sub_80C24BC(void) +{ + struct UnkStruct_80C4CF0 data; + data.v0 = gUnknown_20399E0->field_000[0]->field_404 + 8; + data.v2 = 0x10; + data.v4 = gUnknown_20399E0->field_000[3]->field_404 - 8; + data.v6 = 0xA0; + sub_80C4C2C(0, 2, 0); + sub_80C4C74(18, 0); + sub_80C4C88(16); + sub_80C4CF0(0, &data); + sub_80C4C9C(0, 0); +} + +void sub_80C253C(void) +{ + struct UnkStruct_80C4CF0 data = gUnknown_83F1C34; + sub_80C4BE4(); + sub_80C4C2C(2, 41, 128); + sub_80C4C48(gUnknown_20399E0->field_CD0); + sub_80C4C74(55, 0); + sub_80C4C88(18); + sub_80C4CF0(0, &data); + sub_80C4C9C(0, 0); +} + +void sub_80C2594(u8 taskId) +{ + gTasks[taskId].func = gUnknown_20399E0->field_CC8; +} + +void sub_80C25BC(void) +{ + u8 i; + sub_80C2604(); + for (i = 0; i < 6; i++) + { + FREE_IF_NOT_NULL(gUnknown_20399E0->field_000[i]); + } + FREE_IF_NOT_NULL(gUnknown_20399E0); +} + +void sub_80C2604(void) +{ + u8 i; + for (i = 0; i < 6; i++) + { + gUnknown_20399E0->field_000[i]->field_404 = gUnknown_20399E0->field_000[i]->field_400->pos1.x; + gUnknown_20399E0->field_000[i]->field_406 = gUnknown_20399E0->field_000[i]->field_400->pos1.y; + if (gUnknown_20399E0->field_000[i]->field_400 != NULL) + { + DestroySprite(gUnknown_20399E0->field_000[i]->field_400); + FreeSpriteTilesByTag(gUnknown_20399E0->field_000[i]->field_408); + FreeSpritePaletteByTag(gUnknown_20399E0->field_000[i]->field_40A); + } + } +} |