summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/region_map.s352
-rw-r--r--include/constants/region_map.h3
-rw-r--r--src/region_map.c121
3 files changed, 114 insertions, 362 deletions
diff --git a/asm/region_map.s b/asm/region_map.s
index 08fb0b88a..f0f1de990 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -5,358 +5,6 @@
.text
- thumb_func_start sub_80C0BB0
-sub_80C0BB0: @ 80C0BB0
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r5, _080C0C84 @ =gUnknown_20399D4
- ldr r1, [r5]
- ldr r2, _080C0C88 @ =0x000047ac
- adds r0, r1, r2
- movs r6, 0
- strh r6, [r0]
- ldr r3, _080C0C8C @ =0x000047ae
- adds r2, r1, r3
- movs r0, 0x18
- strh r0, [r2]
- ldr r0, _080C0C90 @ =0x000047b0
- adds r1, r0
- movs r0, 0x20
- strh r0, [r1]
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80C4C9C
- movs r0, 0x1
- bl ClearWindowTilemap
- bl sub_80C3580
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xC5
- beq _080C0C7A
- adds r4, r0, 0
- subs r4, 0x58
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x1
- movs r1, 0
- bl sub_80C4C9C
- ldr r0, [r5]
- ldr r1, _080C0C88 @ =0x000047ac
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0]
- ldr r0, _080C0C94 @ =gUnknown_83F1CAC
- lsls r4, 2
- adds r4, r0
- ldr r4, [r4]
- adds r0, r4, 0
- bl StringLength
- ldr r2, [r5]
- ldr r3, _080C0C98 @ =0x000047aa
- adds r1, r2, r3
- strh r0, [r1]
- ldrh r1, [r1]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- adds r0, 0x32
- adds r3, 0x4
- adds r1, r2, r3
- strh r0, [r1]
- ldr r0, _080C0C90 @ =0x000047b0
- adds r2, r0
- movs r0, 0x30
- strh r0, [r2]
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r0, [r5]
- adds r0, 0x13
- adds r1, r4, 0
- bl StringCopy
- ldr r4, _080C0C9C @ =gUnknown_83F1A9C
- movs r0, 0x1
- bl sub_80C3AC8
- lsls r0, 24
- lsrs r0, 22
- subs r0, 0x8
- adds r0, r4
- ldr r0, [r0]
- str r0, [sp]
- str r6, [sp, 0x4]
- ldr r0, [r5]
- adds r0, 0x13
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0xC
- movs r3, 0x2
- bl AddTextPrinterParameterized3
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
-_080C0C7A:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C0C84: .4byte gUnknown_20399D4
-_080C0C88: .4byte 0x000047ac
-_080C0C8C: .4byte 0x000047ae
-_080C0C90: .4byte 0x000047b0
-_080C0C94: .4byte gUnknown_83F1CAC
-_080C0C98: .4byte 0x000047aa
-_080C0C9C: .4byte gUnknown_83F1A9C
- thumb_func_end sub_80C0BB0
-
- thumb_func_start sub_80C0CA0
-sub_80C0CA0: @ 80C0CA0
- push {lr}
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_80C0CA0
-
- thumb_func_start sub_80C0CC8
-sub_80C0CC8: @ 80C0CC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r1, 0
- lsls r0, 24
- ldr r2, _080C0D0C @ =gUnknown_20399D4
- lsrs r0, 12
- ldr r1, _080C0D10 @ =0x00001796
- adds r0, r1
- ldr r1, [r2]
- adds r6, r1, r0
- movs r1, 0
- mov r8, r2
-_080C0CE4:
- movs r2, 0
- lsls r5, r1, 16
- asrs r1, r5, 16
- lsls r3, r1, 5
- lsls r0, r1, 4
- subs r0, r1
- lsls r4, r0, 1
-_080C0CF2:
- lsls r0, r2, 16
- asrs r1, r0, 16
- adds r2, r0, 0
- cmp r1, 0x1D
- bgt _080C0D14
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- adds r1, r4, r1
- lsls r1, 1
- adds r1, r7
- ldrh r1, [r1]
- b _080C0D1C
- .align 2, 0
-_080C0D0C: .4byte gUnknown_20399D4
-_080C0D10: .4byte 0x00001796
-_080C0D14:
- adds r0, r3, r1
- lsls r0, 1
- adds r0, r6
- ldrh r1, [r7]
-_080C0D1C:
- strh r1, [r0]
- movs r1, 0x80
- lsls r1, 9
- adds r0, r2, r1
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x1F
- ble _080C0CF2
- adds r0, r5, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _080C0CE4
- mov r1, r8
- ldr r0, [r1]
- ldr r1, _080C0D94 @ =0x00004797
- adds r0, r1
- ldrb r5, [r0]
- cmp r5, 0x1
- bne _080C0D86
- movs r4, 0x3
- str r4, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- str r5, [sp, 0xC]
- movs r0, 0
- movs r1, 0xF0
- movs r2, 0x18
- movs r3, 0xE
- bl WriteSequenceToBgTilemapBuffer
- movs r1, 0x80
- lsls r1, 1
- str r4, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- str r5, [sp, 0xC]
- movs r0, 0
- movs r2, 0x18
- movs r3, 0xF
- bl WriteSequenceToBgTilemapBuffer
- movs r1, 0x88
- lsls r1, 1
- str r4, [sp]
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- str r5, [sp, 0xC]
- movs r0, 0
- movs r2, 0x18
- movs r3, 0x10
- bl WriteSequenceToBgTilemapBuffer
-_080C0D86:
- ldr r0, _080C0D98 @ =gUnknown_20399D8
- ldr r0, [r0]
- cmp r0, 0
- beq _080C0DA0
- ldr r1, _080C0D9C @ =0x00001cca
- b _080C0DA6
- .align 2, 0
-_080C0D94: .4byte 0x00004797
-_080C0D98: .4byte gUnknown_20399D8
-_080C0D9C: .4byte 0x00001cca
-_080C0DA0:
- mov r1, r8
- ldr r0, [r1]
- ldr r1, _080C0DF8 @ =0x0000479b
-_080C0DA6:
- adds r0, r1
- ldrb r4, [r0]
- cmp r4, 0x2
- bne _080C0DCC
- ldr r0, _080C0DFC @ =0x000008b5
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080C0DCC
- movs r0, 0x3
- str r0, [sp]
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0xD
- movs r3, 0xB
- bl FillBgTilemapBufferRect_Palette0
-_080C0DCC:
- cmp r4, 0x3
- bne _080C0DEC
- ldr r0, _080C0E00 @ =0x000008c2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080C0DEC
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0x3
- movs r2, 0x15
- movs r3, 0x10
- bl FillBgTilemapBufferRect_Palette0
-_080C0DEC:
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C0DF8: .4byte 0x0000479b
-_080C0DFC: .4byte 0x000008b5
-_080C0E00: .4byte 0x000008c2
- thumb_func_end sub_80C0CC8
-
- thumb_func_start sub_80C0E04
-sub_80C0E04: @ 80C0E04
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080C0E18 @ =gUnknown_20399D4
- ldr r1, [r1]
- ldr r2, _080C0E1C @ =0x00004797
- adds r1, r2
- adds r1, r0
- ldrb r0, [r1]
- bx lr
- .align 2, 0
-_080C0E18: .4byte gUnknown_20399D4
-_080C0E1C: .4byte 0x00004797
- thumb_func_end sub_80C0E04
-
- thumb_func_start sub_80C0E20
-sub_80C0E20: @ 80C0E20
- ldr r0, _080C0E2C @ =gUnknown_20399D4
- ldr r0, [r0]
- ldr r1, _080C0E30 @ =0x0000479b
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080C0E2C: .4byte gUnknown_20399D4
-_080C0E30: .4byte 0x0000479b
- thumb_func_end sub_80C0E20
-
- thumb_func_start sub_80C0E34
-sub_80C0E34: @ 80C0E34
- ldr r0, _080C0E40 @ =gUnknown_20399D4
- ldr r0, [r0]
- ldr r1, _080C0E44 @ =0x0000479c
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080C0E40: .4byte gUnknown_20399D4
-_080C0E44: .4byte 0x0000479c
- thumb_func_end sub_80C0E34
-
- thumb_func_start sub_80C0E48
-sub_80C0E48: @ 80C0E48
- ldr r1, _080C0E54 @ =gUnknown_20399D4
- ldr r1, [r1]
- ldr r2, _080C0E58 @ =0x0000479b
- adds r1, r2
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080C0E54: .4byte gUnknown_20399D4
-_080C0E58: .4byte 0x0000479b
- thumb_func_end sub_80C0E48
-
- thumb_func_start sub_80C0E5C
-sub_80C0E5C: @ 80C0E5C
- ldr r1, _080C0E68 @ =gUnknown_20399D4
- ldr r1, [r1]
- ldr r2, _080C0E6C @ =0x0000479c
- adds r1, r2
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080C0E68: .4byte gUnknown_20399D4
-_080C0E6C: .4byte 0x0000479c
- thumb_func_end sub_80C0E5C
-
thumb_func_start sub_80C0E70
sub_80C0E70: @ 80C0E70
push {r4-r7,lr}
diff --git a/include/constants/region_map.h b/include/constants/region_map.h
index e096f08a2..bd087bd60 100644
--- a/include/constants/region_map.h
+++ b/include/constants/region_map.h
@@ -90,7 +90,8 @@
#define MAPSEC_SECRET_BASE 0x56
#define MAPSEC_DYNAMIC 0x57
-// Kanto landmarks
+#define MAPSECS_KANTO 0x58
+
#define MAPSEC_PALLET_TOWN 0x58
#define MAPSEC_VIRIDIAN_CITY 0x59
#define MAPSEC_PEWTER_CITY 0x5A
diff --git a/src/region_map.c b/src/region_map.c
index 3f1dd9f08..adcf0dcb6 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -11,6 +11,7 @@
#include "sound.h"
#include "new_menu_helpers.h"
#include "menu.h"
+#include "string_util.h"
#include "strings.h"
#include "constants/flags.h"
#include "constants/songs.h"
@@ -18,12 +19,11 @@
struct UnkStruct_20399D4
{
- u8 field_0000[38];
+ u8 field_0000[19];
+ u8 field_0013[19];
u16 field_0026[5][600];
// Inefficiency: these should be u8 or have half the elements each
- u16 field_1796[BG_SCREEN_SIZE];
- u16 field_2796[BG_SCREEN_SIZE];
- u16 field_3796[BG_SCREEN_SIZE];
+ u16 field_1796[3][BG_SCREEN_SIZE];
u8 field_4796;
u8 field_4797[4];
u8 field_479B;
@@ -34,13 +34,23 @@ struct UnkStruct_20399D4
u8 field_47A4;
u8 filler_47A5[3];
u8 field_47A8;
- u8 filler_47A9[15];
+ u16 field_47AA;
+ u16 field_47AC;
+ u16 field_47AE;
+ u16 field_47B0;
+ u8 filler_47B2[6];
TaskFunc field_47B8;
MainCallback field_47BC;
};
+struct UnkStruct_20399D8
+{
+ u8 filler_0000[0x1CCA];
+ u8 field_1CCA;
+};
+
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
-EWRAM_DATA void * gUnknown_20399D8 = NULL;
+EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
EWRAM_DATA void * gUnknown_20399DC = NULL;
EWRAM_DATA void * gUnknown_20399E0 = NULL;
EWRAM_DATA void * gUnknown_20399E4 = NULL;
@@ -123,6 +133,8 @@ extern const u8 gUnknown_83F1A90[];
extern const u8 sSeviiMapsecs[3][30];
extern const u8 gUnknown_83F1B00[3][4];
extern const u16 gUnknown_83F1B0C[3][4];
+extern const u8 *const gUnknown_83F1A9C[];
+extern const u8 *const gUnknown_83F1CAC[];
static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint)
{
@@ -583,9 +595,9 @@ void sub_80C0904(void)
void sub_80C0A2C(void)
{
- SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796);
- SetBgTilemapBuffer(1, gUnknown_20399D4->field_2796);
- SetBgTilemapBuffer(2, gUnknown_20399D4->field_3796);
+ SetBgTilemapBuffer(0, gUnknown_20399D4->field_1796[0]);
+ SetBgTilemapBuffer(1, gUnknown_20399D4->field_1796[1]);
+ SetBgTilemapBuffer(2, gUnknown_20399D4->field_1796[2]);
}
void sub_80C0A6C(void)
@@ -648,3 +660,94 @@ void sub_80C0B9C(void)
{
sub_80C4CF0(1, gUnknown_83F1B0C[1]);
}
+
+void sub_80C0BB0(void)
+{
+ u16 mapsecId;
+ u16 descOffset;
+ gUnknown_20399D4->field_47AC = 0;
+ gUnknown_20399D4->field_47AE = 24;
+ gUnknown_20399D4->field_47B0 = 32;
+ sub_80C4C9C(1, 1);
+ ClearWindowTilemap(1);
+ mapsecId = sub_80C3580();
+ if (mapsecId != MAPSEC_NONE)
+ {
+ descOffset = mapsecId - MAPSECS_KANTO;
+ sub_80C4C9C(1, 0);
+ gUnknown_20399D4->field_47AC = 1;
+ gUnknown_20399D4->field_47AA = StringLength(gUnknown_83F1CAC[descOffset]);
+ gUnknown_20399D4->field_47AE = gUnknown_20399D4->field_47AA * 10 + 50;
+ gUnknown_20399D4->field_47B0 = 48;
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ StringCopy(gUnknown_20399D4->field_0013, gUnknown_83F1CAC[descOffset]);
+ AddTextPrinterParameterized3(1, 2, 12, 2, gUnknown_83F1A9C[sub_80C3AC8(1) - 2], 0, gUnknown_20399D4->field_0013);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+ }
+}
+
+void sub_80C0CA0(void)
+{
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ CopyWindowToVram(0, 3);
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ CopyWindowToVram(1, 3);
+}
+
+void sub_80C0CC8(u8 bg, u16 *map)
+{
+ s16 i;
+ s16 j;
+ u8 r4;
+ u16 *buffer = gUnknown_20399D4->field_1796[bg];
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 32; j++)
+ {
+ if (j < 30)
+ buffer[32 * i + j] = map[30 * i + j];
+ else
+ buffer[32 * i + j] = map[0];
+ }
+ }
+ if (gUnknown_20399D4->field_4797[0] == 1)
+ {
+ WriteSequenceToBgTilemapBuffer(0, 0x0F0, 0x18, 0x0E, 3, 1, 0x3, 0x001);
+ WriteSequenceToBgTilemapBuffer(0, 0x100, 0x18, 0x0F, 3, 1, 0x3, 0x001);
+ WriteSequenceToBgTilemapBuffer(0, 0x110, 0x18, 0x10, 3, 1, 0x3, 0x001);
+ }
+ if (gUnknown_20399D8 != NULL)
+ r4 = gUnknown_20399D8->field_1CCA;
+ else
+ r4 = gUnknown_20399D4->field_479B;
+ if (r4 == 2 && !FlagGet(FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR))
+ FillBgTilemapBufferRect_Palette0(0, 0x003, 13, 11, 3, 2);
+ if (r4 == 3 && !FlagGet(FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR))
+ FillBgTilemapBufferRect_Palette0(0, 0x003, 21, 16, 3, 3);
+}
+
+u8 sub_80C0E04(u8 a0)
+{
+ return gUnknown_20399D4->field_4797[a0];
+}
+
+u8 sub_80C0E20(void)
+{
+ return gUnknown_20399D4->field_479B;
+}
+
+u8 sub_80C0E34(void)
+{
+ return gUnknown_20399D4->field_479C;
+}
+
+void sub_80C0E48(u8 a0)
+{
+ gUnknown_20399D4->field_479B = a0;
+}
+
+void sub_80C0E5C(u8 a0)
+{
+ gUnknown_20399D4->field_479C = a0;
+}