diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-04 13:12:22 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-01-04 13:12:22 -0500 |
commit | 2c825017e6a2e78374ccd97337580c15c2503a23 (patch) | |
tree | 13c2108691e9b72c4fb7b4cb60fc7196f8d653cd | |
parent | e58e6689b83d1bbcdae1009bc752aa37680a744f (diff) |
through sub_80C1A94
-rw-r--r-- | asm/region_map.s | 304 | ||||
-rw-r--r-- | include/map_preview_screen.h | 1 | ||||
-rw-r--r-- | include/strings.h | 1 | ||||
-rw-r--r-- | src/region_map.c | 116 |
4 files changed, 117 insertions, 305 deletions
diff --git a/asm/region_map.s b/asm/region_map.s index ceb2213d1..ab3e5be1b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,310 +5,6 @@ .text - thumb_func_start sub_80C195C -sub_80C195C: @ 80C195C - push {r4-r6,lr} - adds r6, r2, 0 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _080C19E0 @ =gUnknown_20399DC - ldr r0, _080C19E4 @ =0x00003e28 - bl AllocZeroed - str r0, [r4] - bl sub_80C3580 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xB8 - bne _080C197C - movs r0, 0xBC -_080C197C: - bl sub_80F8544 - ldr r1, [r4] - movs r2, 0xF5 - lsls r2, 6 - adds r1, r2 - str r0, [r1] - cmp r0, 0 - bne _080C199E - movs r0, 0x8A - bl sub_80F8544 - ldr r1, [r4] - movs r3, 0xF5 - lsls r3, 6 - adds r1, r3 - str r0, [r1] -_080C199E: - ldr r0, [r4] - ldr r1, _080C19E8 @ =0x00003d48 - adds r0, r1 - movs r2, 0 - strb r2, [r0] - ldr r0, [r4] - ldr r3, _080C19EC @ =0x00003d4a - adds r0, r3 - strb r2, [r0] - ldr r0, [r4] - subs r3, 0x6 - adds r1, r0, r3 - str r6, [r1] - ldr r1, _080C19F0 @ =0x00003e14 - adds r0, r1 - strh r2, [r0] - movs r0, 0 - bl sub_80C4AAC - bl sub_80C4BE4 - bl sub_80C0CA0 - ldr r1, _080C19F4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C19F8 @ =sub_80C1A94 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C19E0: .4byte gUnknown_20399DC -_080C19E4: .4byte 0x00003e28 -_080C19E8: .4byte 0x00003d48 -_080C19EC: .4byte 0x00003d4a -_080C19F0: .4byte 0x00003e14 -_080C19F4: .4byte gTasks -_080C19F8: .4byte sub_80C1A94 - thumb_func_end sub_80C195C - - thumb_func_start sub_80C19FC -sub_80C19FC: @ 80C19FC - push {lr} - ldr r0, _080C1A18 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r2, _080C1A1C @ =0x00003d4a - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080C1A3A - cmp r0, 0x1 - bgt _080C1A20 - cmp r0, 0 - beq _080C1A2A - b _080C1A72 - .align 2, 0 -_080C1A18: .4byte gUnknown_20399DC -_080C1A1C: .4byte 0x00003d4a -_080C1A20: - cmp r0, 0x2 - beq _080C1A50 - cmp r0, 0x3 - beq _080C1A5E - b _080C1A72 -_080C1A2A: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0x4] - bl LZ77UnCompWram - b _080C1A76 -_080C1A3A: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0x8] - movs r2, 0xE1 - lsls r2, 6 - adds r1, r2 - bl LZ77UnCompWram - b _080C1A76 -_080C1A50: - movs r2, 0xE1 - lsls r2, 6 - movs r0, 0x2 - movs r3, 0 - bl LoadBgTiles - b _080C1A76 -_080C1A5E: - movs r2, 0xF5 - lsls r2, 6 - adds r0, r1, r2 - ldr r0, [r0] - ldr r0, [r0, 0xC] - movs r1, 0xD0 - movs r2, 0x60 - bl LoadPalette - b _080C1A76 -_080C1A72: - movs r0, 0x1 - b _080C1A86 -_080C1A76: - ldr r0, _080C1A8C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1A90 @ =0x00003d4a - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_080C1A86: - pop {r1} - bx r1 - .align 2, 0 -_080C1A8C: .4byte gUnknown_20399DC -_080C1A90: .4byte 0x00003d4a - thumb_func_end sub_80C19FC - - thumb_func_start sub_80C1A94 -sub_80C1A94: @ 80C1A94 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080C1AB8 @ =gUnknown_20399DC - ldr r0, [r1] - ldr r3, _080C1ABC @ =0x00003d48 - adds r0, r3 - ldrb r0, [r0] - adds r4, r1, 0 - cmp r0, 0x9 - bls _080C1AAC - b _080C1BD0 -_080C1AAC: - lsls r0, 2 - ldr r1, _080C1AC0 @ =_080C1AC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C1AB8: .4byte gUnknown_20399DC -_080C1ABC: .4byte 0x00003d48 -_080C1AC0: .4byte _080C1AC4 - .align 2, 0 -_080C1AC4: - .4byte _080C1AEC - .4byte _080C1B04 - .4byte _080C1B12 - .4byte _080C1B34 - .4byte _080C1B54 - .4byte _080C1B5C - .4byte _080C1B74 - .4byte _080C1B84 - .4byte _080C1B9C - .4byte _080C1BBC -_080C1AEC: - bl sub_80C08E0 - ldr r0, _080C1AFC @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B00 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1AFC: .4byte gUnknown_20399DC -_080C1B00: .4byte 0x00003d48 -_080C1B04: - bl sub_80C19FC - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - b _080C1BC2 -_080C1B12: - bl sub_80C1E94 - ldr r0, _080C1B28 @ =gUnknown_8418E9E - bl sub_80C4E74 - ldr r0, _080C1B2C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B30 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B28: .4byte gUnknown_8418E9E -_080C1B2C: .4byte gUnknown_20399DC -_080C1B30: .4byte 0x00003d48 -_080C1B34: - ldr r1, [r4] - movs r3, 0xE1 - lsls r3, 6 - adds r1, r3 - movs r0, 0x2 - bl sub_80C1E78 - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r1, [r4] - ldr r0, _080C1B50 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B50: .4byte 0x00003d48 -_080C1B54: - movs r0, 0x2 - bl ShowBg - b _080C1BC2 -_080C1B5C: - bl sub_80C08F4 - ldr r0, _080C1B6C @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1B70 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1B6C: .4byte gUnknown_20399DC -_080C1B70: .4byte 0x00003d48 -_080C1B74: - movs r0, 0 - bl sub_80C1F80 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - b _080C1BC2 -_080C1B84: - ldr r0, _080C1B94 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080C1B98 @ =sub_80C1BE0 - str r0, [r1] - b _080C1BD0 - .align 2, 0 -_080C1B94: .4byte gTasks -_080C1B98: .4byte sub_80C1BE0 -_080C1B9C: - movs r0, 0x1 - bl sub_80C1F80 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080C1BD0 - ldr r0, _080C1BB4 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r0, _080C1BB8 @ =0x00003d48 - adds r1, r0 - b _080C1BCA - .align 2, 0 -_080C1BB4: .4byte gUnknown_20399DC -_080C1BB8: .4byte 0x00003d48 -_080C1BBC: - adds r0, r2, 0 - bl sub_80C1E14 -_080C1BC2: - ldr r0, _080C1BD8 @ =gUnknown_20399DC - ldr r1, [r0] - ldr r3, _080C1BDC @ =0x00003d48 - adds r1, r3 -_080C1BCA: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080C1BD0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C1BD8: .4byte gUnknown_20399DC -_080C1BDC: .4byte 0x00003d48 - thumb_func_end sub_80C1A94 - thumb_func_start sub_80C1BE0 sub_80C1BE0: @ 80C1BE0 push {r4-r7,lr} diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h index 5ab5584e5..c4e2fa70c 100644 --- a/include/map_preview_screen.h +++ b/include/map_preview_screen.h @@ -49,5 +49,6 @@ void sub_80F85BC(u16 a0); u16 sub_80F856C(u8 id); bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime); bool32 sub_80F83B0(void); +const struct MapPreviewScreen * sub_80F8544(u8 mapsec); #endif //GUARD_MAP_PREVIEW_SCREEN_H diff --git a/include/strings.h b/include/strings.h index 56aa2ec1a..cf26e63fd 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1008,6 +1008,7 @@ extern const u8 gUnknown_8418EB5[]; extern const u8 gUnknown_8418E8B[]; extern const u8 gUnknown_8418E8D[]; extern const u8 gUnknown_8418E95[]; +extern const u8 gUnknown_8418E9E[]; extern const u8 gUnknown_8418EA7[]; extern const u8 gUnknown_8418EB0[]; extern const u8 gUnknown_8418EBC[]; diff --git a/src/region_map.c b/src/region_map.c index f654ae0cf..a42a9183d 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -13,6 +13,7 @@ #include "menu.h" #include "string_util.h" #include "strings.h" +#include "map_preview_screen.h" #include "constants/flags.h" #include "constants/songs.h" #include "constants/region_map.h" @@ -84,9 +85,23 @@ struct UnkStruct_83F1B3C const u8 *field_8; }; +struct UnkStruct_20399DC +{ + u16 field_0000[0x1C20]; + u16 field_3840[0x280]; + const struct MapPreviewScreen * field_3D40; + TaskFunc field_3D44; + u8 field_3D48; + u8 field_3D49; + u8 field_3D4A; + u8 filler_3D4B[0xC9]; + u16 field_3E14; + u8 filler_3E16[0x12]; +}; // size = 0x3E28 + EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL; EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL; -EWRAM_DATA void * gUnknown_20399DC = NULL; +EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL; EWRAM_DATA void * gUnknown_20399E0 = NULL; EWRAM_DATA void * gUnknown_20399E4 = NULL; EWRAM_DATA void * gUnknown_20399E8 = NULL; @@ -127,6 +142,12 @@ bool8 sub_80C16D0(void); void sub_80C1754(u8 a0, u16 a1, u16 a2); void sub_80C176C(u8 a0, u16 a1, u16 a2); void sub_80C1880(void); +void sub_80C1A94(u8 taskId); +void sub_80C1BE0(u8 taskId); +void sub_80C1E14(u8 taskId); +void sub_80C1E94(void); +void sub_80C1E78(u8 bgId, const u16 * tilemap); +bool8 sub_80C1F80(u8 a0); void sub_80C4AAC(u8 a0); void sub_80C4BE4(void); void sub_80C4C2C(u8 a0, u16 a1, u16 a2); @@ -1198,3 +1219,96 @@ const u8 *sub_80C1920(u16 a0) } return gUnknown_8418EC3; } + +void sub_80C195C(u8 a0, u8 taskId, TaskFunc taskFunc) +{ + u8 r0; + gUnknown_20399DC = AllocZeroed(sizeof(struct UnkStruct_20399DC)); + r0 = sub_80C3580(); + if (r0 == MAPSEC_TANOBY_CHAMBERS) + r0 = MAPSEC_MONEAN_CHAMBER; + gUnknown_20399DC->field_3D40 = sub_80F8544(r0); + if (gUnknown_20399DC->field_3D40 == NULL) + gUnknown_20399DC->field_3D40 = sub_80F8544(MAPSEC_ROCK_TUNNEL); + gUnknown_20399DC->field_3D48 = 0; + gUnknown_20399DC->field_3D4A = 0; + gUnknown_20399DC->field_3D44 = taskFunc; + gUnknown_20399DC->field_3E14 = 0; + sub_80C4AAC(0); + sub_80C4BE4(); + sub_80C0CA0(); + gTasks[taskId].func = sub_80C1A94; +} + +bool8 sub_80C19FC(void) +{ + switch (gUnknown_20399DC->field_3D4A) + { + case 0: + LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilesptr, gUnknown_20399DC->field_0000); + break; + case 1: + LZ77UnCompWram(gUnknown_20399DC->field_3D40->tilemapptr, gUnknown_20399DC->field_3840); + break; + case 2: + LoadBgTiles(2, gUnknown_20399DC->field_0000, 0x3840, 0x000); + break; + case 3: + LoadPalette(gUnknown_20399DC->field_3D40->palptr, 0xD0, 0x60); + break; + default: + return TRUE; + } + gUnknown_20399DC->field_3D4A++; + return FALSE; +} + +void sub_80C1A94(u8 taskId) +{ + switch (gUnknown_20399DC->field_3D48) + { + case 0: + sub_80C08E0(); + gUnknown_20399DC->field_3D48++; + break; + case 1: + if (sub_80C19FC() == TRUE) + gUnknown_20399DC->field_3D48++; + break; + case 2: + sub_80C1E94(); + sub_80C4E74(gUnknown_8418E9E); + gUnknown_20399DC->field_3D48++; + break; + case 3: + sub_80C1E78(2, gUnknown_20399DC->field_3840); + CopyBgTilemapBufferToVram(2); + gUnknown_20399DC->field_3D48++; + break; + case 4: + ShowBg(2); + gUnknown_20399DC->field_3D48++; + break; + case 5: + sub_80C08F4(); + gUnknown_20399DC->field_3D48++; + break; + case 6: + if (sub_80C1F80(0) == TRUE) + gUnknown_20399DC->field_3D48++; + break; + case 7: + gTasks[taskId].func = sub_80C1BE0; + break; + case 8: + if (sub_80C1F80(1) == TRUE) + { + gUnknown_20399DC->field_3D48++; + } + break; + case 9: + sub_80C1E14(taskId); + gUnknown_20399DC->field_3D48++; + break; + } +} |