diff options
-rw-r--r-- | asm/region_map.s | 310 | ||||
-rw-r--r-- | src/region_map.c | 98 |
2 files changed, 98 insertions, 310 deletions
diff --git a/asm/region_map.s b/asm/region_map.s index b08e56f6c..85735a08b 100644 --- a/asm/region_map.s +++ b/asm/region_map.s @@ -5,316 +5,6 @@ .text - thumb_func_start sub_80C3AC8 -sub_80C3AC8: @ 80C3AC8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080C3AE4 - cmp r0, 0x1 - beq _080C3AF0 - ldr r0, _080C3AE0 @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - b _080C3AF6 - .align 2, 0 -_080C3AE0: .4byte gUnknown_20399E4 -_080C3AE4: - ldr r0, _080C3AEC @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - b _080C3AF6 - .align 2, 0 -_080C3AEC: .4byte gUnknown_20399E4 -_080C3AF0: - ldr r0, _080C3AFC @ =gUnknown_20399E4 - ldr r0, [r0] - ldrb r0, [r0, 0x18] -_080C3AF6: - pop {r1} - bx r1 - .align 2, 0 -_080C3AFC: .4byte gUnknown_20399E4 - thumb_func_end sub_80C3AC8 - - thumb_func_start sub_80C3B00 -sub_80C3B00: @ 80C3B00 - push {lr} - ldr r0, _080C3B24 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - ldrb r0, [r0, 0x14] - pop {r1} - bx r1 - .align 2, 0 -_080C3B24: .4byte gSaveBlock1Ptr - thumb_func_end sub_80C3B00 - - thumb_func_start sub_80C3B28 -sub_80C3B28: @ 80C3B28 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _080C3B58 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0x4 - ldrsb r0, [r1, r0] - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - bl get_map_light_level_by_bank_and_number - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x8 - bhi _080C3B84 - lsls r0, 2 - ldr r1, _080C3B5C @ =_080C3B60 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080C3B58: .4byte gSaveBlock1Ptr -_080C3B5C: .4byte _080C3B60 - .align 2, 0 -_080C3B60: - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3BAC - .4byte _080C3B84 - .4byte _080C3B84 - .4byte _080C3BAC - .4byte _080C3C2C - .4byte _080C3BF0 -_080C3B84: - ldr r0, _080C3BA0 @ =gUnknown_20399E4 - ldr r2, [r0] - ldr r1, _080C3BA4 @ =gMapHeader - ldrb r0, [r1, 0x14] - strh r0, [r2, 0x14] - ldr r0, [r1] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, _080C3BA8 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r4, [r0] - ldrh r5, [r0, 0x2] - b _080C3C9A - .align 2, 0 -_080C3BA0: .4byte gUnknown_20399E4 -_080C3BA4: .4byte gMapHeader -_080C3BA8: .4byte gSaveBlock1Ptr -_080C3BAC: - ldr r4, _080C3BE8 @ =gSaveBlock1Ptr - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x24 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x25 - ldrb r1, [r1] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r0, _080C3BEC @ =gUnknown_20399E4 - ldr r1, [r0] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, [r4] - ldrh r4, [r0, 0x28] - ldrh r5, [r0, 0x2A] - b _080C3C9A - .align 2, 0 -_080C3BE8: .4byte gSaveBlock1Ptr -_080C3BEC: .4byte gUnknown_20399E4 -_080C3BF0: - ldr r4, _080C3C24 @ =gSaveBlock1Ptr - ldr r1, [r4] - movs r0, 0x14 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x15] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r0, _080C3C28 @ =gUnknown_20399E4 - ldr r1, [r0] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldr r0, [r4] - ldrh r4, [r0, 0x18] - ldrh r5, [r0, 0x1A] - b _080C3C9A - .align 2, 0 -_080C3C24: .4byte gSaveBlock1Ptr -_080C3C28: .4byte gUnknown_20399E4 -_080C3C2C: - ldr r4, _080C3C5C @ =gUnknown_20399E4 - ldr r0, [r4] - ldr r1, _080C3C60 @ =gMapHeader - ldrb r1, [r1, 0x14] - strh r1, [r0, 0x14] - cmp r1, 0xC4 - beq _080C3C68 - ldr r0, _080C3C64 @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r5, r0, 0 - adds r5, 0x24 - movs r0, 0 - ldrsb r0, [r5, r0] - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r5, r1] - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - b _080C3C8E - .align 2, 0 -_080C3C5C: .4byte gUnknown_20399E4 -_080C3C60: .4byte gMapHeader -_080C3C64: .4byte gSaveBlock1Ptr -_080C3C68: - ldr r0, _080C3D30 @ =gSaveBlock1Ptr - ldr r0, [r0] - adds r5, r0, 0 - adds r5, 0x14 - ldrb r0, [r0, 0x14] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ldrsb r1, [r5, r1] - lsls r1, 16 - lsrs r1, 16 - bl Overworld_GetMapHeaderByGroupAndId - adds r2, r0, 0 - ldr r1, [r4] - ldrb r0, [r2, 0x14] - strh r0, [r1, 0x14] -_080C3C8E: - ldr r0, [r2] - ldrh r1, [r0] - ldrh r0, [r0, 0x4] - mov r8, r0 - ldrh r4, [r5, 0x4] - ldrh r5, [r5, 0x6] -_080C3C9A: - ldr r0, _080C3D34 @ =gUnknown_20399E4 - ldr r7, [r0] - ldrh r0, [r7, 0x14] - subs r0, 0x58 - strh r0, [r7, 0x14] - ldr r0, _080C3D38 @ =gUnknown_83F2178 - mov r10, r0 - ldrh r0, [r7, 0x14] - lsls r0, 2 - mov r9, r0 - add r0, r10 - ldrh r6, [r0] - adds r0, r1, 0 - adds r1, r6, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080C3CC4 - movs r1, 0x1 -_080C3CC4: - adds r0, r4, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r6 - bcc _080C3CD8 - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_080C3CD8: - mov r0, r10 - adds r0, 0x2 - add r0, r9 - ldrh r6, [r0] - mov r0, r8 - adds r1, r6, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _080C3CF2 - movs r1, 0x1 -_080C3CF2: - adds r0, r5, 0 - bl __udivsi3 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r6 - bcc _080C3D06 - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080C3D06: - ldr r1, _080C3D3C @ =gUnknown_83F1E60 - mov r2, r9 - adds r0, r2, r1 - ldrh r0, [r0] - adds r0, r4, r0 - strh r0, [r7] - ldrh r0, [r7, 0x14] - lsls r0, 2 - adds r1, 0x2 - adds r0, r1 - ldrh r0, [r0] - adds r0, r5, r0 - strh r0, [r7, 0x2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C3D30: .4byte gSaveBlock1Ptr -_080C3D34: .4byte gUnknown_20399E4 -_080C3D38: .4byte gUnknown_83F2178 -_080C3D3C: .4byte gUnknown_83F1E60 - thumb_func_end sub_80C3B28 - thumb_func_start sub_80C3D40 sub_80C3D40: @ 80C3D40 push {r4,r5,lr} diff --git a/src/region_map.c b/src/region_map.c index c07ebcfb0..c380319dc 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -310,6 +310,8 @@ extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34; extern const struct OamData gUnknown_83F1C3C; extern const union AnimCmd *const gUnknown_83F1C50[]; extern const u8 *const gUnknown_83F1CAC[]; +extern const u16 gUnknown_83F1E60[][2]; +extern const u16 gUnknown_83F2178[][2]; static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint) { @@ -2440,3 +2442,99 @@ u8 sub_80C3878(u8 mapsec) return 1; } } + +u8 sub_80C3AC8(u8 a0) +{ + switch (a0) + { + default: + return gUnknown_20399E4->field_016; + case 0: + return gUnknown_20399E4->field_016; + case 1: + return gUnknown_20399E4->field_018; + } +} + +u8 sub_80C3B00(void) +{ + return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId; +} + +void sub_80C3B28(void) +{ + u16 width; + u32 divisor; + u16 height; + u16 x; + u16 y; + u32 r6; + const struct MapHeader * mapHeader; + struct WarpData * warp; + + switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)) + { + default: + case 1: + case 2: + case 3: + case 5: + case 6: + gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId; + width = gMapHeader.mapLayout->width; + height = gMapHeader.mapLayout->height; + x = gSaveBlock1Ptr->pos.x; + y = gSaveBlock1Ptr->pos.y; + break; + case 4: + case 7: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = gSaveBlock1Ptr->escapeWarp.x; + y = gSaveBlock1Ptr->escapeWarp.y; + break; + case 9: + mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = gSaveBlock1Ptr->warp2.x; + y = gSaveBlock1Ptr->warp2.y; + break; + case 8: + if ((gUnknown_20399E4->field_014 = gMapHeader.regionMapSectionId) != MAPSEC_SPECIAL_AREA) + { + warp = &gSaveBlock1Ptr->escapeWarp; + mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); + } + else + { + warp = &gSaveBlock1Ptr->warp2; + mapHeader = Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum); + gUnknown_20399E4->field_014 = mapHeader->regionMapSectionId; + } + width = mapHeader->mapLayout->width; + height = mapHeader->mapLayout->height; + x = warp->x; + y = warp->y; + break; + } + + gUnknown_20399E4->field_014 -= MAPSECS_KANTO; + divisor = width / gUnknown_83F2178[gUnknown_20399E4->field_014][0]; + if (divisor == 0) + divisor = 1; + x /= divisor; + if (x >= gUnknown_83F2178[gUnknown_20399E4->field_014][0]) + x = gUnknown_83F2178[gUnknown_20399E4->field_014][0] - 1; + divisor = height / gUnknown_83F2178[gUnknown_20399E4->field_014][1]; + if (divisor == 0) + divisor = 1; + y /= divisor; + if (y >= gUnknown_83F2178[gUnknown_20399E4->field_014][1]) + y = gUnknown_83F2178[gUnknown_20399E4->field_014][1] - 1; + gUnknown_20399E4->field_000 = x + gUnknown_83F1E60[gUnknown_20399E4->field_014][0]; + gUnknown_20399E4->field_002 = y + gUnknown_83F1E60[gUnknown_20399E4->field_014][1]; +} |