summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/region_map.s310
-rw-r--r--src/region_map.c98
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];
+}