summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/region_map.s293
-rw-r--r--src/region_map.c132
2 files changed, 121 insertions, 304 deletions
diff --git a/asm/region_map.s b/asm/region_map.s
index a91d4bd7e..ac9ceeefd 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -5,299 +5,6 @@
.text
- thumb_func_start sub_80C4164
-sub_80C4164: @ 80C4164
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r1, r3, 16
- cmp r0, 0x1
- beq _080C4198
- cmp r0, 0x1
- bgt _080C4186
- cmp r0, 0
- beq _080C4190
- b _080C41D0
-_080C4186:
- cmp r5, 0x2
- beq _080C41A0
- cmp r5, 0x3
- beq _080C41A8
- b _080C41D0
-_080C4190:
- ldr r3, _080C4194 @ =gUnknown_83F2490
- b _080C41AA
- .align 2, 0
-_080C4194: .4byte gUnknown_83F2490
-_080C4198:
- ldr r3, _080C419C @ =gUnknown_83F2724
- b _080C41AA
- .align 2, 0
-_080C419C: .4byte gUnknown_83F2724
-_080C41A0:
- ldr r3, _080C41A4 @ =gUnknown_83F29B8
- b _080C41AA
- .align 2, 0
-_080C41A4: .4byte gUnknown_83F29B8
-_080C41A8:
- ldr r3, _080C41CC @ =gUnknown_83F2C4C
-_080C41AA:
- lsls r1, 16
- asrs r1, 16
- lsls r0, r2, 16
- asrs r0, 16
- movs r2, 0x16
- muls r0, r2
- adds r1, r0
- lsls r0, r4, 2
- adds r0, r4
- lsls r2, r0, 5
- adds r0, r2
- lsls r0, 1
- adds r1, r0
- adds r1, r3
- ldrb r0, [r1]
- b _080C41D2
- .align 2, 0
-_080C41CC: .4byte gUnknown_83F2C4C
-_080C41D0:
- movs r0, 0xC5
-_080C41D2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80C4164
-
- thumb_func_start sub_80C41D8
-sub_80C41D8: @ 80C41D8
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r5, r1, 16
- ldr r4, _080C4204 @ =gUnknown_20399E8
- movs r0, 0x8C
- bl AllocZeroed
- adds r1, r0, 0
- str r1, [r4]
- ldr r0, _080C4208 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0x1
- bne _080C4210
- ldr r0, _080C420C @ =gUnknown_83EF59C
- adds r1, 0xC
- bl LZ77UnCompWram
- b _080C4218
- .align 2, 0
-_080C4204: .4byte gUnknown_20399E8
-_080C4208: .4byte gSaveBlock2Ptr
-_080C420C: .4byte gUnknown_83EF59C
-_080C4210:
- ldr r0, _080C423C @ =gUnknown_83EF524
- adds r1, 0xC
- bl LZ77UnCompWram
-_080C4218:
- ldr r4, _080C4240 @ =gUnknown_20399E8
- ldr r0, [r4]
- strh r6, [r0, 0x8]
- strh r5, [r0, 0xA]
- bl sub_80C3508
- ldr r1, [r4]
- strh r0, [r1]
- bl sub_80C3514
- ldr r1, [r4]
- strh r0, [r1, 0x2]
- bl sub_80C4244
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C423C: .4byte gUnknown_83EF524
-_080C4240: .4byte gUnknown_20399E8
- thumb_func_end sub_80C41D8
-
- thumb_func_start sub_80C4244
-sub_80C4244: @ 80C4244
- push {r4-r6,lr}
- sub sp, 0x40
- ldr r6, _080C42FC @ =gUnknown_20399E8
- ldr r2, [r6]
- adds r0, r2, 0
- adds r0, 0xC
- str r0, [sp, 0x30]
- movs r1, 0x80
- add r5, sp, 0x30
- str r1, [r5, 0x4]
- ldrh r0, [r2, 0x8]
- lsls r0, 16
- orrs r0, r1
- str r0, [r5, 0x4]
- ldr r0, _080C4300 @ =gUnknown_83EF27C
- str r0, [sp, 0x38]
- ldrh r3, [r2, 0xA]
- ldr r1, _080C4304 @ =0xffff0000
- add r4, sp, 0x38
- ldr r0, [r4, 0x4]
- ands r0, r1
- orrs r0, r3
- str r0, [r4, 0x4]
- ldrh r0, [r2, 0x8]
- add r1, sp, 0x18
- movs r3, 0
- strh r0, [r1]
- ldrh r2, [r2, 0xA]
- mov r0, sp
- adds r0, 0x1A
- strh r2, [r0]
- ldr r0, _080C4308 @ =gUnknown_83F1C54
- str r0, [sp, 0x1C]
- ldr r0, _080C430C @ =gUnknown_83F1C64
- str r0, [sp, 0x20]
- str r3, [sp, 0x24]
- ldr r0, _080C4310 @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x28]
- ldr r0, _080C4314 @ =SpriteCallbackDummy
- str r0, [sp, 0x2C]
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- ldr r0, _080C4318 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0x1
- bne _080C42AA
- ldr r0, _080C431C @ =gUnknown_83EF29C
- str r0, [sp, 0x38]
-_080C42AA:
- adds r0, r5, 0
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl LoadSpritePalette
- ldr r0, [r6]
- movs r2, 0
- ldrsh r1, [r0, r2]
- lsls r1, 19
- movs r3, 0x90
- lsls r3, 14
- adds r1, r3
- asrs r1, 16
- movs r3, 0x2
- ldrsh r2, [r0, r3]
- lsls r2, 19
- movs r0, 0x90
- lsls r0, 14
- adds r2, r0
- asrs r2, 16
- mov r0, sp
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r6]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080C4320 @ =gSprites
- adds r1, r0
- str r1, [r2, 0x4]
- movs r0, 0x1
- bl sub_80C4324
- add sp, 0x40
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080C42FC: .4byte gUnknown_20399E8
-_080C4300: .4byte gUnknown_83EF27C
-_080C4304: .4byte 0xffff0000
-_080C4308: .4byte gUnknown_83F1C54
-_080C430C: .4byte gUnknown_83F1C64
-_080C4310: .4byte gDummySpriteAffineAnimTable
-_080C4314: .4byte SpriteCallbackDummy
-_080C4318: .4byte gSaveBlock2Ptr
-_080C431C: .4byte gUnknown_83EF29C
-_080C4320: .4byte gSprites
- thumb_func_end sub_80C4244
-
- thumb_func_start sub_80C4324
-sub_80C4324: @ 80C4324
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080C4344 @ =gUnknown_20399E8
- ldr r1, [r1]
- ldr r2, [r1, 0x4]
- adds r2, 0x3E
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- ldrb r3, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- bx lr
- .align 2, 0
-_080C4344: .4byte gUnknown_20399E8
- thumb_func_end sub_80C4324
-
- thumb_func_start sub_80C4348
-sub_80C4348: @ 80C4348
- push {r4,lr}
- ldr r4, _080C437C @ =gUnknown_20399E8
- ldr r0, [r4]
- ldr r0, [r0, 0x4]
- cmp r0, 0
- beq _080C4368
- bl DestroySprite
- ldr r0, [r4]
- ldrh r0, [r0, 0x8]
- bl FreeSpriteTilesByTag
- ldr r0, [r4]
- ldrh r0, [r0, 0xA]
- bl FreeSpritePaletteByTag
-_080C4368:
- ldr r0, [r4]
- cmp r0, 0
- beq _080C4376
- bl Free
- movs r0, 0
- str r0, [r4]
-_080C4376:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080C437C: .4byte gUnknown_20399E8
- thumb_func_end sub_80C4348
-
- thumb_func_start sub_80C4380
-sub_80C4380: @ 80C4380
- ldr r0, _080C4388 @ =gUnknown_20399E8
- ldr r0, [r0]
- ldrh r0, [r0]
- bx lr
- .align 2, 0
-_080C4388: .4byte gUnknown_20399E8
- thumb_func_end sub_80C4380
-
- thumb_func_start sub_80C438C
-sub_80C438C: @ 80C438C
- ldr r0, _080C4394 @ =gUnknown_20399E8
- ldr r0, [r0]
- ldrh r0, [r0, 0x2]
- bx lr
- .align 2, 0
-_080C4394: .4byte gUnknown_20399E8
- thumb_func_end sub_80C438C
-
thumb_func_start sub_80C4398
sub_80C4398: @ 80C4398
push {r4-r6,lr}
diff --git a/src/region_map.c b/src/region_map.c
index 40dbadf0e..7ce44b421 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -163,12 +163,22 @@ struct UnkStruct_20399E4
u16 field_024[0x080];
};
+struct UnkStruct_20399E8
+{
+ s16 field_00;
+ s16 field_02;
+ struct Sprite * field_04;
+ u16 field_08;
+ u16 field_0A;
+ u16 field_0C[0x40];
+};
+
EWRAM_DATA struct UnkStruct_20399D4 * gUnknown_20399D4 = NULL;
EWRAM_DATA struct UnkStruct_20399D8 * gUnknown_20399D8 = NULL;
EWRAM_DATA struct UnkStruct_20399DC * gUnknown_20399DC = NULL;
EWRAM_DATA struct UnkStruct_20399E0 * gUnknown_20399E0 = NULL;
EWRAM_DATA struct UnkStruct_20399E4 * gUnknown_20399E4 = NULL;
-EWRAM_DATA void * gUnknown_20399E8 = NULL;
+EWRAM_DATA struct UnkStruct_20399E8 * gUnknown_20399E8 = NULL;
EWRAM_DATA void * gUnknown_20399EC = NULL;
EWRAM_DATA void * gUnknown_20399F0[3] = {};
EWRAM_DATA void * gUnknown_20399FC = NULL;
@@ -232,14 +242,18 @@ u8 sub_80C31C0(void);
u8 sub_80C3348(void);
u8 sub_80C3400(void);
void sub_80C3418(void);
+u16 sub_80C3508(void);
+u16 sub_80C3514(void);
u16 sub_80C3520(void);
+u16 sub_80C3580(void);
u8 sub_80C35DC(u8 a0);
u8 sub_80C3878(u8 a0);
u8 sub_80C3AC8(u8 a0);
void sub_80C3D40(void);
u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3);
void sub_80C41D8(u16 a0, u16 a1);
-void sub_80C4324(u8 a0);
+void sub_80C4244(void);
+void sub_80C4324(bool8 a0);
void sub_80C4348(void);
u16 sub_80C4380();
u16 sub_80C438C();
@@ -262,19 +276,20 @@ void sub_80C4E18(const u8 *str);
void sub_80C4E74(const u8 *str);
void sub_80C4ED0(bool8 a0);
void sub_80C4F08(u8 taskId);
-u16 sub_80C3508(void);
-u16 sub_80C3514(void);
-u16 sub_80C3580(void);
#include "data/text/map_section_names.h"
extern const u16 gUnknown_83EF23C[];
extern const u16 gUnknown_83EF25C[];
+extern const u16 gUnknown_83EF27C[];
+extern const u16 gUnknown_83EF29C[];
extern const u16 gUnknown_83EF2DC[];
extern const u16 gUnknown_83EF384[];
extern const u16 gUnknown_83EF3A4[];
extern const u32 gUnknown_83EF3C4[];
extern const u32 gUnknown_83EF450[];
extern const u32 gUnknown_83EF4E0[];
+extern const u32 gUnknown_83EF524[];
+extern const u32 gUnknown_83EF59C[];
extern const u32 gUnknown_83EF61C[];
extern const u32 gUnknown_83F0330[];
extern const u32 gUnknown_83F0E0C[];
@@ -310,9 +325,15 @@ extern const union AnimCmd *const gUnknown_83F1C30[];
extern const struct UnkStruct_80C4CF0 gUnknown_83F1C34;
extern const struct OamData gUnknown_83F1C3C;
extern const union AnimCmd *const gUnknown_83F1C50[];
+extern const struct OamData gUnknown_83F1C54;
+extern const union AnimCmd *const gUnknown_83F1C64[];
extern const u8 *const gUnknown_83F1CAC[];
extern const u16 gUnknown_83F1E60[][2];
extern const u16 gUnknown_83F2178[][2];
+extern const u8 gUnknown_83F2490[][15][22];
+extern const u8 gUnknown_83F2724[][15][22];
+extern const u8 gUnknown_83F29B8[][15][22];
+extern const u8 gUnknown_83F2C4C[][15][22];
static void RegionMap_DarkenPalette(u16 *pal, u16 size, u16 tint)
{
@@ -580,7 +601,7 @@ void sub_80C04E4(u8 taskId)
sub_80C4E18(gUnknown_8418EB5);
sub_80C4E74(gUnknown_8418E8B);
sub_80C4ED0(FALSE);
- sub_80C4324(0);
+ sub_80C4324(FALSE);
sub_80C3154(FALSE);
sub_80C48BC(sub_80C0E20(), 25, 0);
sub_80C4960(sub_80C0E20(), 25, 0);
@@ -1054,7 +1075,7 @@ void sub_80C1098(u8 taskId)
sub_80C0E48(gUnknown_20399D8->field_1CCA);
if (sub_80C0E34() == gUnknown_20399D8->field_1CCA)
{
- sub_80C4324(0);
+ sub_80C4324(FALSE);
sub_80C48BC(gUnknown_20399D8->field_1CCA, 25, 0);
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
}
@@ -1205,9 +1226,9 @@ bool8 sub_80C1478(void)
sub_80C4960(gUnknown_20399D8->field_1CCA, 25, 0);
}
if (gUnknown_20399D8->field_1CCA != sub_80C0E34())
- sub_80C4324(1);
+ sub_80C4324(TRUE);
else
- sub_80C4324(0);
+ sub_80C4324(FALSE);
sub_80C4CF0(1, &data);
return FALSE;
}
@@ -1766,7 +1787,7 @@ void sub_80C267C(u8 taskId)
gUnknown_20399E0->field_CCC++;
break;
case 7:
- sub_80C4324(0);
+ sub_80C4324(FALSE);
sub_80C3154(FALSE);
gUnknown_20399E0->field_CCC++;
break;
@@ -1946,7 +1967,7 @@ void sub_80C2C7C(u8 taskId)
break;
case 3:
sub_80C22C4(6, FALSE);
- sub_80C4324(1);
+ sub_80C4324(TRUE);
sub_80C3154(TRUE);
sub_80C4960(255, 25, 1);
sub_80C48BC(255, 25, 1);
@@ -2719,3 +2740,92 @@ void sub_80C3D40(void)
}
gUnknown_20399E4->field_014 = sub_80C4164(sub_80C0E20(), 0, gUnknown_20399E4->field_002, gUnknown_20399E4->field_000);
}
+
+u8 sub_80C4164(u8 a0, u8 a1, s16 a2, s16 a3)
+{
+ switch (a0)
+ {
+ case 0:
+ return gUnknown_83F2490[a1][a2][a3];
+ case 1:
+ return gUnknown_83F2724[a1][a2][a3];
+ case 2:
+ return gUnknown_83F29B8[a1][a2][a3];
+ case 3:
+ return gUnknown_83F2C4C[a1][a2][a3];
+ default:
+ return MAPSEC_NONE;
+ }
+}
+
+void sub_80C41D8(u16 a0, u16 a1)
+{
+ gUnknown_20399E8 = AllocZeroed(sizeof(struct UnkStruct_20399E8));
+ if (gSaveBlock2Ptr->playerGender == FEMALE)
+ LZ77UnCompWram(gUnknown_83EF59C, gUnknown_20399E8->field_0C);
+ else
+ LZ77UnCompWram(gUnknown_83EF524, gUnknown_20399E8->field_0C);
+ gUnknown_20399E8->field_08 = a0;
+ gUnknown_20399E8->field_0A = a1;
+ gUnknown_20399E8->field_00 = sub_80C3508();
+ gUnknown_20399E8->field_02 = sub_80C3514();
+ sub_80C4244();
+}
+
+void sub_80C4244(void)
+{
+ u8 spriteId;
+ struct SpriteSheet spriteSheet = {
+ .data = gUnknown_20399E8->field_0C,
+ .size = 0x80,
+ .tag = gUnknown_20399E8->field_08
+ };
+ struct SpritePalette spritePalette = {
+ .data = gUnknown_83EF27C,
+ .tag = gUnknown_20399E8->field_0A
+ };
+ struct SpriteTemplate template = {
+ .tileTag = gUnknown_20399E8->field_08,
+ .paletteTag = gUnknown_20399E8->field_0A,
+ .oam = &gUnknown_83F1C54,
+ .anims = gUnknown_83F1C64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+ };
+
+ if (gSaveBlock2Ptr->playerGender == FEMALE)
+ spritePalette.data = gUnknown_83EF29C;
+
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&spritePalette);
+ spriteId = CreateSprite(&template, 8 * gUnknown_20399E8->field_00 + 36, 8 * gUnknown_20399E8->field_02 + 36, 2);
+ gUnknown_20399E8->field_04 = &gSprites[spriteId];
+ sub_80C4324(TRUE);
+}
+
+void sub_80C4324(bool8 a0)
+{
+ gUnknown_20399E8->field_04->invisible = a0;
+}
+
+void sub_80C4348(void)
+{
+ if (gUnknown_20399E8->field_04 != NULL)
+ {
+ DestroySprite(gUnknown_20399E8->field_04);
+ FreeSpriteTilesByTag(gUnknown_20399E8->field_08);
+ FreeSpritePaletteByTag(gUnknown_20399E8->field_0A);
+ }
+ FREE_IF_NOT_NULL(gUnknown_20399E8);
+}
+
+u16 sub_80C4380(void)
+{
+ return gUnknown_20399E8->field_00;
+}
+
+u16 sub_80C438C(void)
+{
+ return gUnknown_20399E8->field_02;
+}