summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/party_menu.s2
-rw-r--r--asm/region_map.s209
-rw-r--r--include/overworld.h1
-rw-r--r--include/strings.h1
-rw-r--r--src/region_map.c121
5 files changed, 118 insertions, 216 deletions
diff --git a/asm/party_menu.s b/asm/party_menu.s
index f2e681b9b..9c8f7c449 100755
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -9892,7 +9892,7 @@ _081B55E8:
.pool
_081B5614:
ldr r1, =gUnknown_0203CEC8
- ldr r0, =sub_8124690
+ ldr r0, =MCB2_FlyMap
b _081B5628
.pool
_081B5624:
diff --git a/asm/region_map.s b/asm/region_map.s
index a62dbe080..cdcfee68f 100644
--- a/asm/region_map.s
+++ b/asm/region_map.s
@@ -5,215 +5,6 @@
.text
- thumb_func_start sub_8124690
-sub_8124690: @ 8124690
- push {r4,lr}
- sub sp, 0xC
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xA
- bls _081246A4
- b _081248AA
-_081246A4:
- lsls r0, 2
- ldr r1, =_081246B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081246B8:
- .4byte _081246E4
- .4byte _08124766
- .4byte _0812477C
- .4byte _0812478C
- .4byte _0812479C
- .4byte _081247E4
- .4byte _081247F8
- .4byte _0812480C
- .4byte _0812484C
- .4byte _08124852
- .4byte _0812486C
-_081246E4:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- ldr r4, =gUnknown_0203A148
- ldr r0, =0x00000a74
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- bne _08124754
- ldr r0, =sub_8086194
- bl SetMainCallback2
- b _081248AA
- .pool
-_08124754:
- bl ResetPaletteFade
- bl ResetSpriteData
- bl FreeSpriteTileRanges
- bl FreeAllSpritePalettes
- b _0812489C
-_08124766:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_085A1EE4
- movs r0, 0x1
- movs r2, 0x3
- bl InitBgsFromTemplates
- b _0812489C
- .pool
-_0812477C:
- ldr r0, =gUnknown_085A1EF0
- bl InitWindows
- bl DeactivateAllTextPrinters
- b _0812489C
- .pool
-_0812478C:
- movs r0, 0
- movs r1, 0x65
- movs r2, 0xD0
- bl sub_809882C
- bl clear_scheduled_bg_copies_to_vram
- b _0812489C
-_0812479C:
- ldr r4, =gUnknown_0203A148
- ldr r0, [r4]
- adds r0, 0x8
- movs r1, 0
- bl InitRegionMap
- movs r0, 0
- movs r1, 0
- bl CreateRegionMapCursor
- movs r0, 0x1
- movs r1, 0x1
- bl CreateRegionMapPlayerIcon
- ldr r0, [r4]
- ldrh r1, [r0, 0x8]
- strh r1, [r0, 0x6]
- ldr r1, =0x00000a4c
- adds r0, r1
- movs r1, 0
- movs r2, 0x10
- bl StringFill
- ldr r1, =gUnknown_03001180
- movs r0, 0x1
- str r0, [r1]
- bl sub_8124904
- b _0812489C
- .pool
-_081247E4:
- ldr r0, =gUnknown_085A1C58
- ldr r1, =0x0600c000
- bl LZ77UnCompVram
- b _0812489C
- .pool
-_081247F8:
- ldr r0, =gUnknown_085A1C90
- ldr r1, =0x0600f000
- bl LZ77UnCompVram
- b _0812489C
- .pool
-_0812480C:
- ldr r0, =gUnknown_085A1C38
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x2
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r2, =gText_FlyToWhere
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- b _0812489C
- .pool
-_0812484C:
- bl sub_8124A70
- b _0812489C
-_08124852:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, =sub_81248C0
- bl SetVBlankCallback
- b _0812489C
- .pool
-_0812486C:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuRegBits
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- ldr r0, =sub_8124D14
- bl sub_81248F4
- ldr r0, =sub_81248D4
- bl SetMainCallback2
-_0812489C:
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_081248AA:
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8124690
-
thumb_func_start sub_81248C0
sub_81248C0: @ 81248C0
push {lr}
diff --git a/include/overworld.h b/include/overworld.h
index 5a84e86da..232ed428d 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -60,5 +60,6 @@ bool32 sub_8087598(void);
void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
void warp_in(void);
u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
+void sub_8086194(void);
#endif //GUARD_ROM4_H
diff --git a/include/strings.h b/include/strings.h
index 56e34a5c7..af28afa1b 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -74,5 +74,6 @@ extern const u8 gText_Hoenn[];
extern const u8 gText_Ferry[];
extern const u8 gText_SecretBase[];
extern const u8 gText_Hideout[];
+extern const u8 gText_FlyToWhere[];
#endif //GUARD_STRINGS_H
diff --git a/src/region_map.c b/src/region_map.c
index 38419180d..14bf9a6b0 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -3,6 +3,7 @@
#include "global.h"
#include "main.h"
#include "menu.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "palette.h"
#include "trig.h"
@@ -15,6 +16,7 @@
#include "string_util.h"
#include "strings.h"
#include "text.h"
+#include "text_window.h"
#include "region_map.h"
#define MAP_WIDTH 28
@@ -26,10 +28,6 @@
// Static type declarations
-struct UnkStruct_0203A148 {
- u8 filler_000[0xa74];
-};
-
struct RegionMapLocation
{
u8 x;
@@ -42,7 +40,15 @@ struct RegionMapLocation
// Static RAM declarations
EWRAM_DATA struct RegionMap *gRegionMap = NULL;
-EWRAM_DATA struct UnkStruct_0203A148 *gUnknown_0203A148 = NULL;
+EWRAM_DATA struct {
+ /*0x000*/ u8 filler_000[0x6];
+ /*0x006*/ u16 mapSecId;
+ /*0x008*/ struct RegionMap regionMap;
+ /*0x88c*/ u8 filler_88c[0x1c0];
+ /*0xa4c*/ u8 unk_a4c[0x28];
+} *gUnknown_0203A148 = NULL; // a74
+
+IWRAM_DATA bool32 gUnknown_03001180;
// Static ROM declarations
@@ -68,6 +74,12 @@ static void UnhideRegionMapPlayerIcon(void);
static void RegionMapPlayerIconSpriteCallback_Zoomed(struct Sprite *sprite);
static void RegionMapPlayerIconSpriteCallback_Full(struct Sprite *sprite);
static void RegionMapPlayerIconSpriteCallback(struct Sprite *sprite);
+void sub_81248C0(void);
+void sub_81248D4(void);
+void sub_81248F4(void func(void));
+void sub_8124904(void);
+void sub_8124A70(void);
+void sub_8124D14(void);
// .rodata
@@ -92,6 +104,11 @@ extern const struct SpriteTemplate gUnknown_085A1C08;
extern const struct OamData gUnknown_085A1C20;
extern const union AnimCmd *const gUnknown_085A1C30[];
extern const u8 gUnknown_085A1C34[];
+extern const struct BgTemplate gUnknown_085A1EE4[];
+extern const struct WindowTemplate gUnknown_085A1EF0[];
+extern const u8 gUnknown_085A1C58[];
+extern const u8 gUnknown_085A1C90[];
+extern const u16 gUnknown_085A1C38[];
// .text
@@ -142,7 +159,7 @@ bool8 sub_8122DB0(void)
}
else
{
- LZ77UnCompVram(gUnknown_0859F77C, (u16 *)BG_SCREEN_ADDR(16));
+ LZ77UnCompVram(gUnknown_0859F77C, (u16 *)BG_CHAR_ADDR(2));
}
break;
case 1:
@@ -1264,3 +1281,95 @@ bool32 sub_8124668(u8 mapSecId)
}
return FALSE;
}
+
+void MCB2_FlyMap(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ gUnknown_0203A148 = malloc(sizeof(*gUnknown_0203A148));
+ if (gUnknown_0203A148 == NULL)
+ {
+ SetMainCallback2(sub_8086194);
+ }
+ else
+ {
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeSpriteTileRanges();
+ FreeAllSpritePalettes();
+ gMain.state ++;
+ }
+ break;
+ case 1:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(1, gUnknown_085A1EE4, 3);
+ gMain.state ++;
+ break;
+ case 2:
+ InitWindows(gUnknown_085A1EF0);
+ DeactivateAllTextPrinters();
+ gMain.state ++;
+ break;
+ case 3:
+ sub_809882C(0, 0x65, 0xd0);
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state ++;
+ break;
+ case 4:
+ InitRegionMap(&gUnknown_0203A148->regionMap, FALSE);
+ CreateRegionMapCursor(0, 0);
+ CreateRegionMapPlayerIcon(1, 1);
+ gUnknown_0203A148->mapSecId = gUnknown_0203A148->regionMap.mapSecId;
+ StringFill(gUnknown_0203A148->unk_a4c, CHAR_SPACE, 16);
+ gUnknown_03001180 = TRUE;
+ sub_8124904();
+ gMain.state ++;
+ break;
+ case 5:
+ LZ77UnCompVram(gUnknown_085A1C58, (u16 *)BG_CHAR_ADDR(3));
+ gMain.state ++;
+ break;
+ case 6:
+ LZ77UnCompVram(gUnknown_085A1C90, (u16 *)BG_SCREEN_ADDR(30));
+ gMain.state ++;
+ break;
+ case 7:
+ LoadPalette(gUnknown_085A1C38, 0x10, 0x20);
+ PutWindowTilemap(2);
+ FillWindowPixelBuffer(2, 0x00);
+ PrintTextOnWindow(2, 1, gText_FlyToWhere, 0, 1, 0, NULL);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gMain.state ++;
+ break;
+ case 8:
+ sub_8124A70();
+ gMain.state ++;
+ break;
+ case 9:
+ BlendPalettes(-1, 16, 0);
+ SetVBlankCallback(sub_81248C0);
+ gMain.state ++;
+ break;
+ case 10:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ sub_81248F4(sub_8124D14);
+ SetMainCallback2(sub_81248D4);
+ gMain.state ++;
+ break;
+ }
+}