summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/region_map.s260
-rw-r--r--include/strings.h4
-rw-r--r--src/region_map.c100
3 files changed, 98 insertions, 266 deletions
diff --git a/asm/region_map.s b/asm/region_map.s
index f0f1de990..07764a5e7 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -5,266 +5,6 @@
.text
- thumb_func_start sub_80C0E70
-sub_80C0E70: @ 80C0E70
- push {r4-r7,lr}
- adds r7, r2, 0
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r4, _080C0EA0 @ =gUnknown_20399D8
- movs r0, 0xE7
- lsls r0, 5
- bl AllocZeroed
- str r0, [r4]
- ldr r0, _080C0EA4 @ =0x00000846
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080C0EAC
- ldr r0, [r4]
- ldr r1, _080C0EA8 @ =0x00001ccc
- adds r0, r1
- movs r1, 0x3
- b _080C0ED2
- .align 2, 0
-_080C0EA0: .4byte gUnknown_20399D8
-_080C0EA4: .4byte 0x00000846
-_080C0EA8: .4byte 0x00001ccc
-_080C0EAC:
- ldr r0, _080C0EC4 @ =0x00000845
- bl FlagGet
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _080C0ECC
- ldr r0, [r4]
- ldr r2, _080C0EC8 @ =0x00001ccc
- adds r0, r2
- movs r1, 0x1
- b _080C0ED2
- .align 2, 0
-_080C0EC4: .4byte 0x00000845
-_080C0EC8: .4byte 0x00001ccc
-_080C0ECC:
- ldr r0, [r4]
- ldr r3, _080C0F14 @ =0x00001ccc
- adds r0, r3
-_080C0ED2:
- strb r1, [r0]
- ldr r4, _080C0F18 @ =gUnknown_20399D8
- ldr r2, [r4]
- ldr r0, _080C0F1C @ =0x000018b8
- adds r1, r2, r0
- movs r0, 0x58
- strh r0, [r1]
- ldr r3, _080C0F20 @ =0x00001cc4
- adds r1, r2, r3
- movs r0, 0x98
- strh r0, [r1]
- ldr r1, _080C0F14 @ =0x00001ccc
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080C0F2C
- cmp r0, 0x2
- bgt _080C0F4C
- cmp r0, 0x1
- bne _080C0F4C
- ldr r0, _080C0F24 @ =gUnknown_83F1084
- movs r3, 0x80
- lsls r3, 5
- adds r1, r2, r3
- bl LZ77UnCompWram
- ldr r0, [r4]
- ldr r1, _080C0F28 @ =0x00001cce
- adds r0, r1
- movs r1, 0x6
- strh r1, [r0]
- b _080C0F64
- .align 2, 0
-_080C0F14: .4byte 0x00001ccc
-_080C0F18: .4byte gUnknown_20399D8
-_080C0F1C: .4byte 0x000018b8
-_080C0F20: .4byte 0x00001cc4
-_080C0F24: .4byte gUnknown_83F1084
-_080C0F28: .4byte 0x00001cce
-_080C0F2C:
- ldr r0, _080C0F44 @ =gUnknown_83F1190
- movs r3, 0x80
- lsls r3, 5
- adds r1, r2, r3
- bl LZ77UnCompWram
- ldr r0, [r4]
- ldr r1, _080C0F48 @ =0x00001cce
- adds r0, r1
- movs r1, 0x4
- strh r1, [r0]
- b _080C0F64
- .align 2, 0
-_080C0F44: .4byte gUnknown_83F1190
-_080C0F48: .4byte 0x00001cce
-_080C0F4C:
- ldr r0, _080C0FB4 @ =gUnknown_20399D8
- ldr r1, [r0]
- ldr r3, _080C0FB8 @ =0x00001cce
- adds r2, r1, r3
- movs r0, 0x3
- strh r0, [r2]
- ldr r0, _080C0FBC @ =gUnknown_83F0F1C
- movs r2, 0x80
- lsls r2, 5
- adds r1, r2
- bl LZ77UnCompWram
-_080C0F64:
- ldr r0, _080C0FC0 @ =gUnknown_83F0580
- ldr r4, _080C0FB4 @ =gUnknown_20399D8
- ldr r1, [r4]
- bl LZ77UnCompWram
- ldr r0, [r4]
- ldr r3, _080C0FC4 @ =0x00001cc8
- adds r0, r3
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r4]
- ldr r1, _080C0FC8 @ =0x00001cca
- adds r0, r1
- strb r6, [r0]
- ldr r0, [r4]
- ldr r2, _080C0FCC @ =0x00001cd0
- adds r0, r2
- str r7, [r0]
- bl sub_80C0E34
- ldr r1, [r4]
- ldr r3, _080C0FD0 @ =0x00001ccb
- adds r1, r3
- strb r0, [r1]
- movs r0, 0
- bl sub_80C4AAC
- ldr r0, _080C0FD4 @ =gUnknown_8418EB0
- bl sub_80C4E74
- ldr r1, _080C0FD8 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _080C0FDC @ =sub_80C1098
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080C0FB4: .4byte gUnknown_20399D8
-_080C0FB8: .4byte 0x00001cce
-_080C0FBC: .4byte gUnknown_83F0F1C
-_080C0FC0: .4byte gUnknown_83F0580
-_080C0FC4: .4byte 0x00001cc8
-_080C0FC8: .4byte 0x00001cca
-_080C0FCC: .4byte 0x00001cd0
-_080C0FD0: .4byte 0x00001ccb
-_080C0FD4: .4byte gUnknown_8418EB0
-_080C0FD8: .4byte gTasks
-_080C0FDC: .4byte sub_80C1098
- thumb_func_end sub_80C0E70
-
- thumb_func_start sub_80C0FE0
-sub_80C0FE0: @ 80C0FE0
- push {lr}
- bl sub_80C4BE4
- movs r0, 0x1B
- movs r1, 0x4
- movs r2, 0x40
- bl sub_80C4C2C
- ldr r0, _080C100C @ =gUnknown_20399D8
- ldr r0, [r0]
- ldr r1, _080C1010 @ =0x00001ccd
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 16
- lsrs r0, 16
- bl sub_80C4C5C
- pop {r0}
- bx r0
- .align 2, 0
-_080C100C: .4byte gUnknown_20399D8
-_080C1010: .4byte 0x00001ccd
- thumb_func_end sub_80C0FE0
-
- thumb_func_start sub_80C1014
-sub_80C1014: @ 80C1014
- push {r4,lr}
- ldr r4, _080C1028 @ =gUnknown_20399D8
- ldr r0, [r4]
- ldr r2, _080C102C @ =0x00001ccd
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0xF
- bls _080C1030
- movs r0, 0x1
- b _080C104C
- .align 2, 0
-_080C1028: .4byte gUnknown_20399D8
-_080C102C: .4byte 0x00001ccd
-_080C1030:
- ldrb r1, [r1]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 16
- lsrs r0, 16
- bl sub_80C4C5C
- ldr r1, [r4]
- ldr r0, _080C1054 @ =0x00001ccd
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x2
- strb r0, [r1]
- movs r0, 0
-_080C104C:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080C1054: .4byte 0x00001ccd
- thumb_func_end sub_80C1014
-
- thumb_func_start sub_80C1058
-sub_80C1058: @ 80C1058
- push {lr}
- ldr r2, _080C106C @ =gUnknown_20399D8
- ldr r0, [r2]
- ldr r3, _080C1070 @ =0x00001ccd
- adds r1, r0, r3
- ldrb r0, [r1]
- cmp r0, 0x1
- bhi _080C1074
- movs r0, 0x1
- b _080C108E
- .align 2, 0
-_080C106C: .4byte gUnknown_20399D8
-_080C1070: .4byte 0x00001ccd
-_080C1074:
- subs r0, 0x2
- strb r0, [r1]
- ldr r0, [r2]
- ldr r1, _080C1094 @ =0x00001ccd
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- subs r0, r1
- lsls r0, 16
- lsrs r0, 16
- bl sub_80C4C5C
- movs r0, 0
-_080C108E:
- pop {r1}
- bx r1
- .align 2, 0
-_080C1094: .4byte 0x00001ccd
- thumb_func_end sub_80C1058
-
thumb_func_start sub_80C1098
sub_80C1098: @ 80C1098
push {r4,r5,lr}
diff --git a/include/strings.h b/include/strings.h
index 6cca52507..4e8abffc3 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1007,8 +1007,8 @@ extern const u8 gText_LinkCableBattles[];
extern const u8 gUnknown_8418EB5[];
extern const u8 gUnknown_8418E8B[];
extern const u8 gUnknown_8418E8D[];
-extern const u8 gUnknown_8418E8B[];
-extern const u8 gUnknown_8418EA7[];
extern const u8 gUnknown_8418E95[];
+extern const u8 gUnknown_8418EA7[];
+extern const u8 gUnknown_8418EB0[];
#endif //GUARD_STRINGS_H
diff --git a/src/region_map.c b/src/region_map.c
index adcf0dcb6..d4f1ed99e 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -41,13 +41,27 @@ struct UnkStruct_20399D4
u8 filler_47B2[6];
TaskFunc field_47B8;
MainCallback field_47BC;
-};
+}; // size = 0x47C0
struct UnkStruct_20399D8
{
- u8 filler_0000[0x1CCA];
+ u8 field_0000[0x1000];
+ u8 field_1000[0x4B0];
+ u8 filler_14B0[0x408];
+ u16 field_18B8;
+ u8 filler_18BA[0x40A];
+ u16 field_1CC4;
+ u8 filler_1CC6[0x2];
+ u8 field_1CC8;
+ u8 field_1CC9;
u8 field_1CCA;
-};
+ u8 field_1CCB;
+ u8 field_1CCC;
+ u8 field_1CCD;
+ u16 field_1CCE;
+ TaskFunc field_1CD0;
+ u8 filler_1CD4[0xC];
+}; // size = 0x1CE0
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
@@ -77,9 +91,12 @@ void sub_80C0AB8(void);
void sub_80C0B18(void);
void sub_80C0B9C(void);
void sub_80C0BB0(void);
+void sub_80C1098(u8 taskId);
+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);
@@ -117,14 +134,17 @@ u16 sub_80C3514(void);
u16 sub_80C3580(void);
#include "data/text/map_section_names.h"
-
extern const u16 gUnknown_83EF23C[];
extern const u16 gUnknown_83EF2DC[];
extern const u32 gUnknown_83EF61C[];
+extern const u32 gUnknown_83F0580[];
extern const u32 gUnknown_83F089C[];
extern const u32 gUnknown_83F0AFC[];
extern const u32 gUnknown_83F0C0C[];
extern const u32 gUnknown_83F0CF0[];
+extern const u32 gUnknown_83F0F1C[];
+extern const u32 gUnknown_83F1084[];
+extern const u32 gUnknown_83F1190[];
extern const u32 gUnknown_83F1978[];
extern const u32 gUnknown_83F19A0[];
extern const struct BgTemplate gUnknown_83F1A50[4];
@@ -751,3 +771,75 @@ void sub_80C0E5C(u8 a0)
{
gUnknown_20399D4->field_479C = a0;
}
+
+void sub_80C0E70(u8 a0, u8 taskId, TaskFunc taskFunc)
+{
+ gUnknown_20399D8 = AllocZeroed(sizeof(struct UnkStruct_20399D8));
+ if (FlagGet(FLAG_SYS_SEVII_MAP_4567))
+ gUnknown_20399D8->field_1CCC = 3;
+ else if (FlagGet(FLAG_SYS_SEVII_MAP_123))
+ gUnknown_20399D8->field_1CCC = 1;
+ else
+ gUnknown_20399D8->field_1CCC = 0;
+ gUnknown_20399D8->field_18B8 = 0x58;
+ gUnknown_20399D8->field_1CC4 = 0x98;
+ switch (gUnknown_20399D8->field_1CCC)
+ {
+ case 1:
+ LZ77UnCompWram(gUnknown_83F1084, gUnknown_20399D8->field_1000);
+ gUnknown_20399D8->field_1CCE = 6;
+ break;
+ case 2: // never reached
+ LZ77UnCompWram(gUnknown_83F1190, gUnknown_20399D8->field_1000);
+ gUnknown_20399D8->field_1CCE = 4;
+ break;
+ case 3:
+ default:
+ gUnknown_20399D8->field_1CCE = 3;
+ LZ77UnCompWram(gUnknown_83F0F1C, gUnknown_20399D8->field_1000);
+ break;
+ }
+ LZ77UnCompWram(gUnknown_83F0580, gUnknown_20399D8->field_0000);
+ gUnknown_20399D8->field_1CC8 = 0;
+ gUnknown_20399D8->field_1CCA = a0;
+ gUnknown_20399D8->field_1CD0 = taskFunc;
+ gUnknown_20399D8->field_1CCB = sub_80C0E34();
+ sub_80C4AAC(0);
+ sub_80C4E74(gUnknown_8418EB0);
+ gTasks[taskId].func = sub_80C1098;
+}
+
+void sub_80C0FE0(void)
+{
+ sub_80C4BE4();
+ sub_80C4C2C(27, 4, 64);
+ sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD);
+}
+
+bool8 sub_80C1014(void)
+{
+ if (gUnknown_20399D8->field_1CCD < 16)
+ {
+ sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD);
+ gUnknown_20399D8->field_1CCD += 2;
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+bool8 sub_80C1058(void)
+{
+ if (gUnknown_20399D8->field_1CCD >= 2)
+ {
+ gUnknown_20399D8->field_1CCD -= 2;
+ sub_80C4C5C(16 - gUnknown_20399D8->field_1CCD);
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}