summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokedex_area_screen.s12
-rw-r--r--asm/pokemon_menu.s4
-rw-r--r--asm/pokenav.s10
-rw-r--r--asm/region_map.s3969
-rw-r--r--data-de/region_map_locations.inc327
-rw-r--r--data/region_map.s259
-rw-r--r--data/region_map_locations.inc327
-rw-r--r--data/region_map_sections.inc16
-rw-r--r--graphics/pokenav/fly_target_icons.pal (renamed from graphics/pokenav/map_misc.pal)0
-rw-r--r--graphics/pokenav/fly_target_icons.png (renamed from graphics/pokenav/map_misc.png)bin291 -> 291 bytes
-rw-r--r--graphics/pokenav/region_map.pal226
-rw-r--r--include/field_effect.h2
-rw-r--r--include/flags.h23
-rw-r--r--include/global.fieldmap.h2
-rw-r--r--include/menu.h2
-rw-r--r--include/pokemon_menu.h1
-rw-r--r--include/region_map.h73
-rw-r--r--include/rom4.h2
-rw-r--r--include/secret_base.h1
-rw-r--r--ld_script.txt4
-rw-r--r--src/data/region_map_layout.h42
-rw-r--r--src/data/region_map_names_de.h79
-rw-r--r--src/data/region_map_names_en.h79
-rw-r--r--src/field_region_map.c13
-rw-r--r--src/field_specials.c2
-rw-r--r--src/map_name_popup.c2
-rw-r--r--src/menu.c2
-rw-r--r--src/region_map.c1847
-rw-r--r--src/rom4.c4
-rw-r--r--src/save_menu_util.c2
-rw-r--r--src/secret_base.c2
-rw-r--r--src/tv.c18
-rw-r--r--sym_ewram.txt2
33 files changed, 2184 insertions, 5170 deletions
diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s
index bd8db8a2c..542eed201 100644
--- a/asm/pokedex_area_screen.s
+++ b/asm/pokedex_area_screen.s
@@ -92,7 +92,7 @@ _08110720:
ldr r4, _0811073C @ =0x020006e8
adds r0, r4, 0
movs r1, 0
- bl sub_80FA8EC
+ bl InitRegionMap
movs r0, 0x88
lsls r0, 4
adds r4, r0
@@ -115,7 +115,7 @@ _08110746:
_08110752:
movs r0, 0x1
movs r1, 0x1
- bl sub_80FBCF0
+ bl CreateRegionMapPlayerIcon
movs r1, 0x8
negs r1, r1
movs r0, 0
@@ -1700,7 +1700,7 @@ _08111344:
lsls r0, 24
cmp r0, 0
bne _08111358
- bl sub_80FAB10
+ bl FreeRegionMapIconResources
ldr r0, [r4, 0x4]
bl SetMainCallback2
_08111358:
@@ -1740,7 +1740,7 @@ _08111390:
lsls r0, 24
cmp r0, 0
bne _081113A4
- bl sub_80FAB10
+ bl FreeRegionMapIconResources
ldr r0, [r4, 0x8]
bl SetMainCallback2
_081113A4:
@@ -1859,7 +1859,7 @@ _08111496:
ldr r4, _081114B4 @ =0x020006e8
adds r0, r4, 0
movs r1, 0
- bl sub_80FA8EC
+ bl InitRegionMap
movs r0, 0x88
lsls r0, 4
adds r4, r0
@@ -1882,7 +1882,7 @@ _081114BE:
_081114CA:
movs r0, 0x1
movs r1, 0x1
- bl sub_80FBCF0
+ bl CreateRegionMapPlayerIcon
movs r1, 0x8
negs r1, r1
movs r0, 0
diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s
index 3a1552f70..fe1b41724 100644
--- a/asm/pokemon_menu.s
+++ b/asm/pokemon_menu.s
@@ -2093,7 +2093,7 @@ _0808AB6C: .4byte gPaletteFade
_0808AB70: .4byte gTasks
_0808AB74: .4byte c2_exit_to_overworld_2_switch
_0808AB78:
- ldr r0, _0808AB8C @ =sub_80FC074
+ ldr r0, _0808AB8C @ =CB2_InitFlyRegionMap
bl SetMainCallback2
_0808AB7E:
adds r0, r4, 0
@@ -2103,7 +2103,7 @@ _0808AB84:
pop {r0}
bx r0
.align 2, 0
-_0808AB8C: .4byte sub_80FC074
+_0808AB8C: .4byte CB2_InitFlyRegionMap
thumb_func_end sub_808AB34
thumb_func_start sub_808AB90
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 757a2a5a2..cb6a40450 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -340,7 +340,7 @@ sub_80EBD30: @ 80EBD30
bl LoadOam
bl ProcessSpriteCopyRequests
bl TransferPlttBuffer
- bl sub_80FB260
+ bl UpdateRegionMapVideoRegs
bl sub_80EFE7C
pop {r0}
bx r0
@@ -10523,7 +10523,7 @@ sub_80F0FFC: @ 80F0FFC
ldrh r1, [r0]
adds r0, r5, 0
movs r2, 0
- bl sub_80FBFB4
+ bl GetMapSectionName
ldr r0, _080F1054 @ =gWindowConfig_81E710C
bl BasicInitMenuWindow
adds r0, r5, 0
@@ -14321,10 +14321,10 @@ sub_80F2DD8: @ 80F2DD8
push {lr}
movs r0, 0x7
movs r1, 0x7
- bl sub_80FBB3C
+ bl CreateRegionMapCursor
movs r0, 0x8
movs r1, 0x8
- bl sub_80FBCF0
+ bl CreateRegionMapPlayerIcon
bl sub_80FBF94
pop {r0}
bx r0
@@ -14333,7 +14333,7 @@ sub_80F2DD8: @ 80F2DD8
thumb_func_start sub_80F2DF4
sub_80F2DF4: @ 80F2DF4
push {lr}
- bl sub_80FAB10
+ bl FreeRegionMapIconResources
pop {r0}
bx r0
thumb_func_end sub_80F2DF4
diff --git a/asm/region_map.s b/asm/region_map.s
deleted file mode 100644
index 44d6a4e91..000000000
--- a/asm/region_map.s
+++ /dev/null
@@ -1,3969 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80FA8EC
-sub_80FA8EC: @ 80FA8EC
- push {lr}
- lsls r1, 24
- lsrs r1, 24
- bl sub_80FA904
-_080FA8F6:
- bl sub_80FA940
- lsls r0, 24
- cmp r0, 0
- bne _080FA8F6
- pop {r0}
- bx r0
- thumb_func_end sub_80FA8EC
-
- thumb_func_start sub_80FA904
-sub_80FA904: @ 80FA904
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080FA928 @ =gUnknown_020388CC
- str r0, [r3]
- movs r2, 0x79
- adds r2, r0
- mov r12, r2
- movs r2, 0
- mov r4, r12
- strb r2, [r4]
- adds r0, 0x78
- strb r1, [r0]
- ldr r3, [r3]
- cmp r1, 0
- bne _080FA930
- ldr r0, _080FA92C @ =sub_80FAB78
- b _080FA932
- .align 2, 0
-_080FA928: .4byte gUnknown_020388CC
-_080FA92C: .4byte sub_80FAB78
-_080FA930:
- ldr r0, _080FA93C @ =sub_80FAD04
-_080FA932:
- str r0, [r3, 0x18]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA93C: .4byte sub_80FAD04
- thumb_func_end sub_80FA904
-
- thumb_func_start sub_80FA940
-sub_80FA940: @ 80FA940
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r0, _080FA95C @ =gUnknown_020388CC
- ldr r0, [r0]
- adds r0, 0x79
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _080FA952
- b _080FAAE2
-_080FA952:
- lsls r0, 2
- ldr r1, _080FA960 @ =_080FA964
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FA95C: .4byte gUnknown_020388CC
-_080FA960: .4byte _080FA964
- .align 2, 0
-_080FA964:
- .4byte _080FA984
- .4byte _080FA998
- .4byte _080FA9AC
- .4byte _080FA9BC
- .4byte _080FA9D8
- .4byte _080FA9F4
- .4byte _080FAA38
- .4byte _080FAAB4
-_080FA984:
- ldr r0, _080FA990 @ =gUnknown_083E5DA0
- ldr r1, _080FA994 @ =0x06008000
- bl LZ77UnCompVram
- b _080FAAF4
- .align 2, 0
-_080FA990: .4byte gUnknown_083E5DA0
-_080FA994: .4byte 0x06008000
-_080FA998:
- ldr r0, _080FA9A4 @ =gUnknown_083E6B04
- ldr r1, _080FA9A8 @ =0x0600e000
- bl LZ77UnCompVram
- b _080FAAF4
- .align 2, 0
-_080FA9A4: .4byte gUnknown_083E6B04
-_080FA9A8: .4byte 0x0600e000
-_080FA9AC:
- ldr r0, _080FA9B8 @ =gUnknown_083E5D60
- movs r1, 0x70
- movs r2, 0x60
- bl LoadPalette
- b _080FAAF4
- .align 2, 0
-_080FA9B8: .4byte gUnknown_083E5D60
-_080FA9BC:
- ldr r0, _080FA9D0 @ =gUnknown_083E5AF0
- ldr r1, _080FA9D4 @ =gUnknown_020388CC
- ldr r1, [r1]
- movs r2, 0xC0
- lsls r2, 1
- adds r1, r2
- bl LZ77UnCompWram
- b _080FAAF4
- .align 2, 0
-_080FA9D0: .4byte gUnknown_083E5AF0
-_080FA9D4: .4byte gUnknown_020388CC
-_080FA9D8:
- ldr r0, _080FA9EC @ =gUnknown_083E5B34
- ldr r1, _080FA9F0 @ =gUnknown_020388CC
- ldr r1, [r1]
- movs r3, 0xA0
- lsls r3, 2
- adds r1, r3
- bl LZ77UnCompWram
- b _080FAAF4
- .align 2, 0
-_080FA9EC: .4byte gUnknown_083E5B34
-_080FA9F0: .4byte gUnknown_020388CC
-_080FA9F4:
- bl sub_80FB32C
- ldr r4, _080FAA34 @ =gUnknown_020388CC
- ldr r2, [r4]
- adds r0, r2, 0
- adds r0, 0x54
- ldrh r1, [r0]
- adds r0, 0x20
- strh r1, [r0]
- subs r0, 0x1E
- ldrh r0, [r0]
- adds r1, r2, 0
- adds r1, 0x76
- strh r0, [r1]
- ldrh r0, [r2, 0x14]
- bl sub_80FB758
- ldr r1, [r4]
- strb r0, [r1, 0x16]
- ldr r0, [r4]
- ldrh r0, [r0, 0x14]
- bl sub_80FB9C0
- adds r1, r0, 0
- ldr r0, [r4]
- strh r1, [r0, 0x14]
- ldrh r1, [r0, 0x14]
- movs r2, 0x10
- bl sub_80FBFB4
- b _080FAAF4
- .align 2, 0
-_080FAA34: .4byte gUnknown_020388CC
-_080FAA38:
- ldr r0, _080FAA60 @ =gUnknown_020388CC
- ldr r4, [r0]
- adds r0, r4, 0
- adds r0, 0x78
- ldrb r1, [r0]
- cmp r1, 0
- bne _080FAA64
- movs r0, 0x80
- lsls r0, 1
- str r0, [sp]
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl sub_80FB170
- b _080FAAF4
- .align 2, 0
-_080FAA60: .4byte gUnknown_020388CC
-_080FAA64:
- adds r1, r4, 0
- adds r1, 0x54
- ldrh r0, [r1]
- lsls r0, 3
- subs r0, 0x34
- adds r2, r4, 0
- adds r2, 0x5C
- movs r3, 0
- strh r0, [r2]
- movs r5, 0x56
- adds r5, r4
- mov r12, r5
- ldrh r0, [r5]
- lsls r0, 3
- subs r0, 0x44
- adds r5, r4, 0
- adds r5, 0x5E
- strh r0, [r5]
- ldrh r1, [r1]
- adds r0, r4, 0
- adds r0, 0x64
- strh r1, [r0]
- mov r0, r12
- ldrh r1, [r0]
- adds r0, r4, 0
- adds r0, 0x66
- strh r1, [r0]
- movs r1, 0
- ldrsh r0, [r2, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r2, 0x80
- str r2, [sp]
- str r2, [sp, 0x4]
- str r3, [sp, 0x8]
- movs r2, 0x38
- movs r3, 0x48
- bl sub_80FB170
- b _080FAAF4
-_080FAAB4:
- bl sub_80FBA18
- bl sub_80FB260
- ldr r2, _080FAAE8 @ =gUnknown_020388CC
- ldr r0, [r2]
- movs r1, 0
- str r1, [r0, 0x1C]
- str r1, [r0, 0x20]
- adds r0, 0x7A
- strb r1, [r0]
- ldr r0, [r2]
- adds r0, 0x7E
- strb r1, [r0]
- ldr r1, _080FAAEC @ =REG_BG2CNT
- ldr r3, _080FAAF0 @ =0x0000bc8a
- adds r0, r3, 0
- strh r0, [r1]
- ldr r1, [r2]
- adds r1, 0x79
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080FAAE2:
- movs r0, 0
- b _080FAB02
- .align 2, 0
-_080FAAE8: .4byte gUnknown_020388CC
-_080FAAEC: .4byte REG_BG2CNT
-_080FAAF0: .4byte 0x0000bc8a
-_080FAAF4:
- ldr r0, _080FAB0C @ =gUnknown_020388CC
- ldr r1, [r0]
- adds r1, 0x79
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0x1
-_080FAB02:
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080FAB0C: .4byte gUnknown_020388CC
- thumb_func_end sub_80FA940
-
- thumb_func_start sub_80FAB10
-sub_80FAB10: @ 80FAB10
- push {r4,lr}
- ldr r4, _080FAB5C @ =gUnknown_020388CC
- ldr r0, [r4]
- ldr r0, [r0, 0x1C]
- cmp r0, 0
- beq _080FAB34
- bl DestroySprite
- ldr r0, [r4]
- adds r0, 0x58
- ldrh r0, [r0]
- bl FreeSpriteTilesByTag
- ldr r0, [r4]
- adds r0, 0x5A
- ldrh r0, [r0]
- bl FreeSpritePaletteByTag
-_080FAB34:
- ldr r0, [r4]
- ldr r0, [r0, 0x20]
- cmp r0, 0
- beq _080FAB54
- bl DestroySprite
- ldr r0, [r4]
- adds r0, 0x70
- ldrh r0, [r0]
- bl FreeSpriteTilesByTag
- ldr r0, [r4]
- adds r0, 0x72
- ldrh r0, [r0]
- bl FreeSpritePaletteByTag
-_080FAB54:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAB5C: .4byte gUnknown_020388CC
- thumb_func_end sub_80FAB10
-
- thumb_func_start sub_80FAB60
-sub_80FAB60: @ 80FAB60
- push {lr}
- ldr r0, _080FAB74 @ =gUnknown_020388CC
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080FAB74: .4byte gUnknown_020388CC
- thumb_func_end sub_80FAB60
-
- thumb_func_start sub_80FAB78
-sub_80FAB78: @ 80FAB78
- push {r4,lr}
- movs r4, 0
- ldr r2, _080FAC14 @ =gUnknown_020388CC
- ldr r0, [r2]
- adds r0, 0x7B
- strb r4, [r0]
- ldr r0, [r2]
- adds r0, 0x7C
- strb r4, [r0]
- ldr r3, _080FAC18 @ =gMain
- ldrh r1, [r3, 0x2C]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080FABAA
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0x56
- ldrh r0, [r0]
- cmp r0, 0x2
- bls _080FABAA
- adds r1, 0x7C
- movs r0, 0xFF
- strb r0, [r1]
- movs r4, 0x1
-_080FABAA:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080FABC8
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0x56
- ldrh r0, [r0]
- cmp r0, 0xF
- bhi _080FABC8
- adds r1, 0x7C
- movs r0, 0x1
- strb r0, [r1]
- movs r4, 0x1
-_080FABC8:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080FABE6
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0x54
- ldrh r0, [r0]
- cmp r0, 0x1
- bls _080FABE6
- adds r1, 0x7B
- movs r0, 0xFF
- strb r0, [r1]
- movs r4, 0x1
-_080FABE6:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080FAC04
- ldr r1, [r2]
- adds r0, r1, 0
- adds r0, 0x54
- ldrh r0, [r0]
- cmp r0, 0x1B
- bhi _080FAC04
- adds r1, 0x7B
- movs r0, 0x1
- strb r0, [r1]
- movs r4, 0x1
-_080FAC04:
- ldrh r3, [r3, 0x2E]
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _080FAC1C
- movs r4, 0x4
- b _080FAC26
- .align 2, 0
-_080FAC14: .4byte gUnknown_020388CC
-_080FAC18: .4byte gMain
-_080FAC1C:
- movs r0, 0x2
- ands r0, r3
- cmp r0, 0
- beq _080FAC26
- movs r4, 0x5
-_080FAC26:
- cmp r4, 0x1
- bne _080FAC38
- ldr r0, [r2]
- adds r0, 0x7A
- movs r1, 0x4
- strb r1, [r0]
- ldr r1, [r2]
- ldr r0, _080FAC40 @ =_swiopen
- str r0, [r1, 0x18]
-_080FAC38:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080FAC40: .4byte _swiopen
- thumb_func_end sub_80FAB78
-
- thumb_func_start _swiopen
-_swiopen: @ 80FAC44
- push {r4,r5,lr}
- ldr r5, _080FAC5C @ =gUnknown_020388CC
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x7A
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _080FAC60
- movs r0, 0x2
- b _080FACFA
- .align 2, 0
-_080FAC5C: .4byte gUnknown_020388CC
-_080FAC60:
- adds r0, r1, 0
- adds r0, 0x7B
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _080FAC76
- adds r1, 0x54
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_080FAC76:
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x7B
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bge _080FAC8E
- adds r1, 0x54
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_080FAC8E:
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- ble _080FACA6
- adds r1, 0x56
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
-_080FACA6:
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bge _080FACBE
- adds r1, 0x56
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_080FACBE:
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x54
- ldrh r0, [r0]
- adds r1, 0x56
- ldrh r1, [r1]
- bl GetRegionMapSectionAt
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80FB758
- ldr r1, [r5]
- strb r0, [r1, 0x16]
- ldr r0, [r5]
- ldrh r1, [r0, 0x14]
- cmp r4, r1
- beq _080FACEE
- strh r4, [r0, 0x14]
- ldrh r1, [r0, 0x14]
- movs r2, 0x10
- bl sub_80FBFB4
-_080FACEE:
- bl sub_80FBA18
- ldr r1, [r5]
- ldr r0, _080FAD00 @ =sub_80FAB78
- str r0, [r1, 0x18]
- movs r0, 0x3
-_080FACFA:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080FAD00: .4byte sub_80FAB78
- thumb_func_end _swiopen
-
- thumb_func_start sub_80FAD04
-sub_80FAD04: @ 80FAD04
- push {r4-r6,lr}
- movs r4, 0
- ldr r3, _080FADD4 @ =gUnknown_020388CC
- ldr r0, [r3]
- mov r12, r0
- adds r0, 0x6A
- strh r4, [r0]
- mov r5, r12
- adds r5, 0x68
- strh r4, [r5]
- ldr r2, _080FADD8 @ =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0x40
- ands r0, r1
- adds r6, r3, 0
- adds r3, r2, 0
- cmp r0, 0
- beq _080FAD3E
- mov r0, r12
- adds r0, 0x5E
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0x34
- negs r0, r0
- cmp r1, r0
- ble _080FAD3E
- ldr r0, _080FADDC @ =0x0000ffff
- strh r0, [r5]
- movs r4, 0x1
-_080FAD3E:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080FAD5E
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0x5E
- movs r5, 0
- ldrsh r0, [r0, r5]
- cmp r0, 0x3B
- bgt _080FAD5E
- adds r1, 0x68
- movs r0, 0x1
- strh r0, [r1]
- movs r4, 0x1
-_080FAD5E:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080FAD84
- ldr r2, [r6]
- adds r0, r2, 0
- adds r0, 0x5C
- movs r5, 0
- ldrsh r1, [r0, r5]
- movs r0, 0x2C
- negs r0, r0
- cmp r1, r0
- ble _080FAD84
- adds r1, r2, 0
- adds r1, 0x6A
- ldr r0, _080FADDC @ =0x0000ffff
- strh r0, [r1]
- movs r4, 0x1
-_080FAD84:
- ldrh r1, [r3, 0x2C]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080FADA4
- ldr r1, [r6]
- adds r0, r1, 0
- adds r0, 0x5C
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0xAB
- bgt _080FADA4
- adds r1, 0x6A
- movs r0, 0x1
- strh r0, [r1]
- movs r4, 0x1
-_080FADA4:
- ldrh r2, [r3, 0x2E]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _080FADB0
- movs r4, 0x4
-_080FADB0:
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _080FADBA
- movs r4, 0x5
-_080FADBA:
- cmp r4, 0x1
- bne _080FADCA
- ldr r0, [r6]
- ldr r1, _080FADE0 @ =sub_80FADE4
- str r1, [r0, 0x18]
- adds r0, 0x6C
- movs r1, 0
- strh r1, [r0]
-_080FADCA:
- adds r0, r4, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080FADD4: .4byte gUnknown_020388CC
-_080FADD8: .4byte gMain
-_080FADDC: .4byte 0x0000ffff
-_080FADE0: .4byte sub_80FADE4
- thumb_func_end sub_80FAD04
-
- thumb_func_start sub_80FADE4
-sub_80FADE4: @ 80FADE4
- push {r4,r5,lr}
- ldr r5, _080FAEB4 @ =gUnknown_020388CC
- ldr r2, [r5]
- adds r3, r2, 0
- adds r3, 0x5E
- adds r0, r2, 0
- adds r0, 0x68
- ldrh r0, [r0]
- ldrh r1, [r3]
- adds r0, r1
- strh r0, [r3]
- adds r1, r2, 0
- adds r1, 0x5C
- adds r0, r2, 0
- adds r0, 0x6A
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
- movs r4, 0
- ldrsh r0, [r1, r4]
- movs r2, 0
- ldrsh r1, [r3, r2]
- bl sub_80FB238
- ldr r2, [r5]
- adds r1, r2, 0
- adds r1, 0x6C
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x8
- bne _080FAEBC
- adds r0, r2, 0
- adds r0, 0x5C
- movs r3, 0
- ldrsh r1, [r0, r3]
- adds r0, r1, 0
- adds r0, 0x2C
- cmp r0, 0
- bge _080FAE3C
- adds r0, 0x7
-_080FAE3C:
- asrs r0, 3
- adds r0, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r2, 0
- adds r0, 0x5E
- movs r4, 0
- ldrsh r1, [r0, r4]
- adds r0, r1, 0
- adds r0, 0x34
- cmp r0, 0
- bge _080FAE56
- adds r0, 0x7
-_080FAE56:
- asrs r0, 3
- adds r0, 0x2
- lsls r0, 16
- lsrs r1, r0, 16
- adds r4, r2, 0
- adds r4, 0x64
- adds r0, r2, 0
- adds r0, 0x66
- ldrh r2, [r4]
- cmp r3, r2
- bne _080FAE72
- ldrh r2, [r0]
- cmp r1, r2
- beq _080FAEA0
-_080FAE72:
- strh r3, [r4]
- strh r1, [r0]
- adds r0, r3, 0
- bl GetRegionMapSectionAt
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl sub_80FB758
- ldr r1, [r5]
- strb r0, [r1, 0x16]
- ldr r0, [r5]
- ldrh r3, [r0, 0x14]
- cmp r4, r3
- beq _080FAE9C
- strh r4, [r0, 0x14]
- ldrh r1, [r0, 0x14]
- movs r2, 0x10
- bl sub_80FBFB4
-_080FAE9C:
- bl sub_80FBA18
-_080FAEA0:
- ldr r0, _080FAEB4 @ =gUnknown_020388CC
- ldr r2, [r0]
- adds r1, r2, 0
- adds r1, 0x6C
- movs r0, 0
- strh r0, [r1]
- ldr r0, _080FAEB8 @ =sub_80FAD04
- str r0, [r2, 0x18]
- movs r0, 0x3
- b _080FAEBE
- .align 2, 0
-_080FAEB4: .4byte gUnknown_020388CC
-_080FAEB8: .4byte sub_80FAD04
-_080FAEBC:
- movs r0, 0x2
-_080FAEBE:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FADE4
-
- thumb_func_start sub_80FAEC4
-sub_80FAEC4: @ 80FAEC4
- push {r4-r6,lr}
- ldr r1, _080FAF40 @ =gUnknown_020388CC
- ldr r2, [r1]
- adds r0, r2, 0
- adds r0, 0x78
- ldrb r3, [r0]
- adds r5, r1, 0
- cmp r3, 0
- bne _080FAF48
- subs r0, 0x1A
- strh r3, [r0]
- subs r0, 0x2
- strh r3, [r0]
- str r3, [r2, 0x40]
- str r3, [r2, 0x3C]
- adds r4, r2, 0
- adds r4, 0x54
- ldrh r0, [r4]
- lsls r0, 3
- subs r0, 0x34
- adds r1, r2, 0
- adds r1, 0x60
- strh r0, [r1]
- movs r0, 0x56
- adds r0, r2
- mov r12, r0
- ldrh r0, [r0]
- lsls r0, 3
- subs r0, 0x44
- adds r3, r2, 0
- adds r3, 0x62
- strh r0, [r3]
- movs r6, 0
- ldrsh r0, [r1, r6]
- lsls r0, 8
- cmp r0, 0
- bge _080FAF10
- adds r0, 0xF
-_080FAF10:
- asrs r0, 4
- str r0, [r2, 0x44]
- movs r1, 0
- ldrsh r0, [r3, r1]
- lsls r0, 8
- cmp r0, 0
- bge _080FAF20
- adds r0, 0xF
-_080FAF20:
- asrs r0, 4
- str r0, [r2, 0x48]
- ldrh r1, [r4]
- adds r0, r2, 0
- adds r0, 0x64
- strh r1, [r0]
- mov r3, r12
- ldrh r0, [r3]
- adds r1, r2, 0
- adds r1, 0x66
- strh r0, [r1]
- movs r0, 0x80
- lsls r0, 9
- str r0, [r2, 0x4C]
- ldr r0, _080FAF44 @ =0xfffff800
- b _080FAFA6
- .align 2, 0
-_080FAF40: .4byte gUnknown_020388CC
-_080FAF44: .4byte 0xfffff800
-_080FAF48:
- adds r0, r2, 0
- adds r0, 0x5C
- movs r6, 0
- ldrsh r0, [r0, r6]
- lsls r0, 8
- str r0, [r2, 0x3C]
- adds r0, r2, 0
- adds r0, 0x5E
- movs r1, 0
- ldrsh r0, [r0, r1]
- lsls r0, 8
- str r0, [r2, 0x40]
- adds r0, r2, 0
- adds r0, 0x60
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- ldr r0, [r2, 0x3C]
- cmp r0, 0
- bge _080FAF74
- adds r0, 0xF
-_080FAF74:
- asrs r0, 4
- negs r0, r0
- str r0, [r2, 0x44]
- ldr r0, [r2, 0x40]
- cmp r0, 0
- bge _080FAF82
- adds r0, 0xF
-_080FAF82:
- asrs r0, 4
- negs r0, r0
- str r0, [r2, 0x48]
- adds r0, r2, 0
- adds r0, 0x64
- ldrh r1, [r0]
- subs r0, 0x10
- strh r1, [r0]
- adds r0, 0x12
- ldrh r0, [r0]
- adds r1, r2, 0
- adds r1, 0x56
- strh r0, [r1]
- movs r0, 0x80
- lsls r0, 8
- str r0, [r2, 0x4C]
- movs r0, 0x80
- lsls r0, 4
-_080FAFA6:
- str r0, [r2, 0x50]
- ldr r0, [r5]
- adds r0, 0x6E
- movs r1, 0
- strh r1, [r0]
- bl sub_80FBCA0
- bl sub_80FBDF8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80FAEC4
-
- thumb_func_start sub_80FAFC0
-sub_80FAFC0: @ 80FAFC0
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r0, _080FAFD8 @ =gUnknown_020388CC
- ldr r3, [r0]
- adds r2, r3, 0
- adds r2, 0x6E
- ldrh r1, [r2]
- adds r5, r0, 0
- cmp r1, 0xF
- bls _080FAFDC
- movs r0, 0
- b _080FB164
- .align 2, 0
-_080FAFD8: .4byte gUnknown_020388CC
-_080FAFDC:
- adds r0, r1, 0x1
- movs r1, 0
- strh r0, [r2]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x10
- bne _080FB050
- str r1, [r3, 0x44]
- str r1, [r3, 0x48]
- adds r0, r3, 0
- adds r0, 0x60
- ldrh r1, [r0]
- subs r0, 0x4
- strh r1, [r0]
- adds r0, 0x6
- ldrh r0, [r0]
- adds r1, r3, 0
- adds r1, 0x5E
- strh r0, [r1]
- adds r1, 0x1A
- ldrb r0, [r1]
- movs r2, 0x80
- lsls r2, 9
- cmp r0, 0
- bne _080FB012
- movs r2, 0x80
- lsls r2, 8
-_080FB012:
- str r2, [r3, 0x4C]
- movs r2, 0
- ldrb r0, [r1]
- cmp r0, 0
- bne _080FB01E
- movs r2, 0x1
-_080FB01E:
- strb r2, [r1]
- ldr r1, [r5]
- adds r0, r1, 0
- adds r0, 0x78
- ldrb r0, [r0]
- ldr r2, _080FB048 @ =sub_80FAD04
- cmp r0, 0
- bne _080FB030
- ldr r2, _080FB04C @ =sub_80FAB78
-_080FB030:
- str r2, [r1, 0x18]
- adds r0, r1, 0
- adds r0, 0x58
- ldrh r0, [r0]
- adds r1, 0x5A
- ldrh r1, [r1]
- bl sub_80FBB3C
- bl sub_80FBE24
- movs r4, 0
- b _080FB132
- .align 2, 0
-_080FB048: .4byte sub_80FAD04
-_080FB04C: .4byte sub_80FAB78
-_080FB050:
- ldr r2, [r3, 0x3C]
- ldr r0, [r3, 0x44]
- adds r2, r0
- str r2, [r3, 0x3C]
- ldr r0, [r3, 0x40]
- ldr r1, [r3, 0x48]
- adds r0, r1
- str r0, [r3, 0x40]
- asrs r2, 8
- adds r4, r3, 0
- adds r4, 0x5C
- strh r2, [r4]
- ldr r0, [r3, 0x40]
- asrs r0, 8
- adds r1, r3, 0
- adds r1, 0x5E
- strh r0, [r1]
- ldr r0, [r3, 0x4C]
- ldr r1, [r3, 0x50]
- adds r0, r1
- str r0, [r3, 0x4C]
- ldr r2, [r3, 0x44]
- cmp r2, 0
- bge _080FB090
- adds r0, r3, 0
- adds r0, 0x60
- movs r6, 0
- ldrsh r1, [r4, r6]
- movs r6, 0
- ldrsh r0, [r0, r6]
- cmp r1, r0
- blt _080FB0A4
-_080FB090:
- cmp r2, 0
- ble _080FB0B4
- adds r0, r3, 0
- adds r0, 0x60
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r6, 0
- ldrsh r0, [r0, r6]
- cmp r1, r0
- ble _080FB0B4
-_080FB0A4:
- ldr r3, [r5]
- adds r0, r3, 0
- adds r0, 0x60
- ldrh r2, [r0]
- subs r0, 0x4
- movs r1, 0
- strh r2, [r0]
- str r1, [r3, 0x44]
-_080FB0B4:
- ldr r2, [r5]
- ldr r4, [r2, 0x48]
- cmp r4, 0
- bge _080FB0D0
- adds r0, r2, 0
- adds r0, 0x5E
- adds r3, r2, 0
- adds r3, 0x62
- movs r6, 0
- ldrsh r1, [r0, r6]
- movs r6, 0
- ldrsh r0, [r3, r6]
- cmp r1, r0
- blt _080FB0E8
-_080FB0D0:
- cmp r4, 0
- ble _080FB0FA
- adds r1, r2, 0
- adds r1, 0x5E
- adds r0, r2, 0
- adds r0, 0x62
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r6, 0
- ldrsh r0, [r0, r6]
- cmp r1, r0
- ble _080FB0FA
-_080FB0E8:
- ldr r2, [r5]
- adds r0, r2, 0
- adds r0, 0x62
- ldrh r1, [r0]
- adds r3, r2, 0
- adds r3, 0x5E
- movs r0, 0
- strh r1, [r3]
- str r0, [r2, 0x48]
-_080FB0FA:
- ldr r0, _080FB118 @ =gUnknown_020388CC
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x78
- ldrb r3, [r0]
- cmp r3, 0
- bne _080FB120
- ldr r1, [r2, 0x4C]
- ldr r0, _080FB11C @ =0x00007fff
- cmp r1, r0
- bgt _080FB130
- adds r0, 0x1
- str r0, [r2, 0x4C]
- str r3, [r2, 0x50]
- b _080FB130
- .align 2, 0
-_080FB118: .4byte gUnknown_020388CC
-_080FB11C: .4byte 0x00007fff
-_080FB120:
- ldr r0, [r2, 0x4C]
- movs r1, 0x80
- lsls r1, 9
- cmp r0, r1
- ble _080FB130
- str r1, [r2, 0x4C]
- movs r0, 0
- str r0, [r2, 0x50]
-_080FB130:
- movs r4, 0x1
-_080FB132:
- ldr r0, _080FB16C @ =gUnknown_020388CC
- ldr r3, [r0]
- adds r0, r3, 0
- adds r0, 0x5C
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r1, r3, 0
- adds r1, 0x5E
- movs r2, 0
- ldrsh r1, [r1, r2]
- ldr r2, [r3, 0x4C]
- lsls r2, 8
- lsrs r2, 16
- str r2, [sp]
- ldr r2, [r3, 0x4C]
- lsls r2, 8
- lsrs r2, 16
- str r2, [sp, 0x4]
- movs r2, 0
- str r2, [sp, 0x8]
- movs r2, 0x38
- movs r3, 0x48
- bl sub_80FB170
- adds r0, r4, 0
-_080FB164:
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080FB16C: .4byte gUnknown_020388CC
- thumb_func_end sub_80FAFC0
-
- thumb_func_start sub_80FB170
-sub_80FB170: @ 80FB170
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r4, [sp, 0x24]
- ldr r7, [sp, 0x28]
- ldr r5, [sp, 0x2C]
- lsls r4, 16
- lsrs r4, 16
- mov r8, r4
- lsls r7, 16
- adds r4, r7, 0
- lsrs r4, 16
- mov r9, r4
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _080FB230 @ =gUnknown_020388CC
- ldr r6, [r4]
- ldr r7, _080FB234 @ =gSineTable
- mov r12, r7
- adds r4, r5, 0
- adds r4, 0x40
- lsls r4, 1
- add r4, r12
- movs r7, 0
- ldrsh r4, [r4, r7]
- str r4, [sp]
- mov r7, r8
- muls r7, r4
- adds r4, r7, 0
- asrs r4, 8
- mov r10, r4
- str r4, [r6, 0x2C]
- lsls r5, 1
- add r5, r12
- movs r7, 0
- ldrsh r5, [r5, r7]
- negs r4, r5
- mov r7, r8
- muls r7, r4
- adds r4, r7, 0
- asrs r4, 8
- mov r12, r4
- str r4, [r6, 0x30]
- mov r7, r9
- muls r7, r5
- adds r5, r7, 0
- asrs r5, 8
- str r5, [r6, 0x34]
- ldr r7, [sp]
- mov r4, r9
- muls r4, r7
- asrs r4, 8
- mov r8, r4
- str r4, [r6, 0x38]
- lsls r0, 16
- asrs r0, 8
- lsls r2, 16
- asrs r2, 16
- lsls r4, r2, 8
- adds r0, r4
- lsls r3, 16
- asrs r3, 16
- adds r4, r3, 0
- muls r4, r5
- mov r5, r10
- muls r5, r2
- adds r4, r5
- subs r0, r4
- str r0, [r6, 0x24]
- lsls r1, 16
- asrs r1, 8
- lsls r0, r3, 8
- adds r1, r0
- mov r0, r8
- muls r0, r3
- mov r3, r12
- muls r3, r2
- adds r2, r3, 0
- adds r0, r2
- subs r1, r0
- str r1, [r6, 0x28]
- adds r6, 0x7D
- movs r0, 0x1
- strb r0, [r6]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB230: .4byte gUnknown_020388CC
-_080FB234: .4byte gSineTable
- thumb_func_end sub_80FB170
-
- thumb_func_start sub_80FB238
-sub_80FB238: @ 80FB238
- ldr r2, _080FB25C @ =gUnknown_020388CC
- ldr r2, [r2]
- lsls r0, 16
- asrs r0, 8
- movs r3, 0xE0
- lsls r3, 5
- adds r0, r3
- str r0, [r2, 0x24]
- lsls r1, 16
- asrs r1, 8
- movs r0, 0x90
- lsls r0, 6
- adds r1, r0
- str r1, [r2, 0x28]
- adds r2, 0x7D
- movs r0, 0x1
- strb r0, [r2]
- bx lr
- .align 2, 0
-_080FB25C: .4byte gUnknown_020388CC
- thumb_func_end sub_80FB238
-
- thumb_func_start sub_80FB260
-sub_80FB260: @ 80FB260
- push {lr}
- ldr r0, _080FB29C @ =gUnknown_020388CC
- ldr r2, [r0]
- adds r3, r2, 0
- adds r3, 0x7D
- ldrb r0, [r3]
- cmp r0, 0
- beq _080FB298
- ldr r1, _080FB2A0 @ =REG_BG2PA
- ldr r0, [r2, 0x2C]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, [r2, 0x34]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, [r2, 0x30]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, [r2, 0x38]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, [r2, 0x24]
- str r0, [r1]
- adds r1, 0x4
- ldr r0, [r2, 0x28]
- str r0, [r1]
- movs r0, 0
- strb r0, [r3]
-_080FB298:
- pop {r0}
- bx r0
- .align 2, 0
-_080FB29C: .4byte gUnknown_020388CC
-_080FB2A0: .4byte REG_BG2PA
- thumb_func_end sub_80FB260
-
- thumb_func_start sub_80FB2A4
-sub_80FB2A4: @ 80FB2A4
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 16
- asrs r4, r0, 16
- lsls r1, 16
- asrs r5, r1, 16
- movs r0, 0x80
- lsls r0, 1
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x38
- movs r3, 0x48
- bl sub_80FB170
- bl sub_80FB260
- ldr r0, _080FB2E8 @ =gUnknown_020388CC
- ldr r2, [r0]
- ldr r1, [r2, 0x20]
- cmp r1, 0
- beq _080FB2E0
- negs r0, r4
- strh r0, [r1, 0x24]
- ldr r1, [r2, 0x20]
- negs r0, r5
- strh r0, [r1, 0x26]
-_080FB2E0:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB2E8: .4byte gUnknown_020388CC
- thumb_func_end sub_80FB2A4
-
- thumb_func_start GetRegionMapSectionAt
-GetRegionMapSectionAt: @ 80FB2EC
- push {lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- ldr r0, _080FB30C @ =0xfffe0000
- adds r1, r0
- lsrs r2, r1, 16
- cmp r2, 0xE
- bhi _080FB306
- cmp r3, 0
- beq _080FB306
- cmp r3, 0x1C
- bls _080FB310
-_080FB306:
- movs r0, 0x58
- b _080FB324
- .align 2, 0
-_080FB30C: .4byte 0xfffe0000
-_080FB310:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r1, _080FB328 @ =gRegionMapSections
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r3, r0
- adds r0, r1
- ldrb r0, [r0]
-_080FB324:
- pop {r1}
- bx r1
- .align 2, 0
-_080FB328: .4byte gRegionMapSections
- thumb_func_end GetRegionMapSectionAt
-
- thumb_func_start sub_80FB32C
-sub_80FB32C: @ 80FB32C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _080FB358 @ =gSaveBlock1
- movs r1, 0x4
- ldrsb r1, [r0, r1]
- adds r2, r0, 0
- cmp r1, 0x19
- bne _080FB35C
- ldrb r0, [r2, 0x5]
- subs r0, 0x29
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bhi _080FB35C
- bl sub_80FB600
- b _080FB5E8
- .align 2, 0
-_080FB358: .4byte gSaveBlock1
-_080FB35C:
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- movs r1, 0x5
- ldrsb r1, [r2, r1]
- bl get_map_light_level_by_bank_and_number
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x8
- bhi _080FB3A4
- lsls r0, 2
- ldr r1, _080FB37C @ =_080FB380
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FB37C: .4byte _080FB380
- .align 2, 0
-_080FB380:
- .4byte _080FB3A4
- .4byte _080FB3A4
- .4byte _080FB3A4
- .4byte _080FB3E0
- .4byte _080FB3A4
- .4byte _080FB3A4
- .4byte _080FB3E0
- .4byte _080FB464
- .4byte _080FB428
-_080FB3A4:
- ldr r4, _080FB3D4 @ =gUnknown_020388CC
- ldr r0, [r4]
- ldr r3, _080FB3D8 @ =gMapHeader
- ldrb r1, [r3, 0x14]
- movs r2, 0
- strh r1, [r0, 0x14]
- adds r0, 0x7F
- strb r2, [r0]
- ldr r0, [r3]
- ldrh r2, [r0]
- ldrh r0, [r0, 0x4]
- mov r8, r0
- ldr r0, _080FB3DC @ =gSaveBlock1
- ldrh r6, [r0]
- ldrh r3, [r0, 0x2]
- ldr r1, [r4]
- ldrh r0, [r1, 0x14]
- cmp r0, 0x45
- beq _080FB3CC
- b _080FB4CC
-_080FB3CC:
- adds r1, 0x7F
- movs r0, 0x1
- strb r0, [r1]
- b _080FB4CC
- .align 2, 0
-_080FB3D4: .4byte gUnknown_020388CC
-_080FB3D8: .4byte gMapHeader
-_080FB3DC: .4byte gSaveBlock1
-_080FB3E0:
- ldr r4, _080FB420 @ =gSaveBlock1
- adds r0, r4, 0
- adds r0, 0x24
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- adds r1, 0x25
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r2, r0, 0
- ldr r0, _080FB424 @ =gUnknown_020388CC
- ldr r0, [r0]
- ldrb r1, [r2, 0x14]
- strh r1, [r0, 0x14]
- adds r0, 0x7F
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r2]
- ldrh r2, [r0]
- ldrh r0, [r0, 0x4]
- mov r8, r0
- ldrh r6, [r4, 0x28]
- ldrh r3, [r4, 0x2A]
- b _080FB4CC
- .align 2, 0
-_080FB420: .4byte gSaveBlock1
-_080FB424: .4byte gUnknown_020388CC
-_080FB428:
- ldr r4, _080FB45C @ =gSaveBlock1
- movs r0, 0x14
- ldrsb r0, [r4, r0]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x15
- ldrsb r1, [r4, r1]
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r2, r0, 0
- ldr r0, _080FB460 @ =gUnknown_020388CC
- ldr r0, [r0]
- ldrb r1, [r2, 0x14]
- strh r1, [r0, 0x14]
- adds r0, 0x7F
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r2]
- ldrh r2, [r0]
- ldrh r0, [r0, 0x4]
- mov r8, r0
- ldrh r6, [r4, 0x18]
- ldrh r3, [r4, 0x1A]
- b _080FB4CC
- .align 2, 0
-_080FB45C: .4byte gSaveBlock1
-_080FB460: .4byte gUnknown_020388CC
-_080FB464:
- ldr r5, _080FB48C @ =gUnknown_020388CC
- ldr r0, [r5]
- ldr r1, _080FB490 @ =gMapHeader
- ldrb r1, [r1, 0x14]
- strh r1, [r0, 0x14]
- cmp r1, 0x57
- beq _080FB498
- ldr r4, _080FB494 @ =gSaveBlock1 + 0x24
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r2, r0, 0
- b _080FB4B6
- .align 2, 0
-_080FB48C: .4byte gUnknown_020388CC
-_080FB490: .4byte gMapHeader
-_080FB494: .4byte gSaveBlock1 + 0x24
-_080FB498:
- ldr r4, _080FB548 @ =gSaveBlock1 + 0x14
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r2, r0, 0
- ldr r1, [r5]
- ldrb r0, [r2, 0x14]
- strh r0, [r1, 0x14]
-_080FB4B6:
- ldr r0, _080FB54C @ =gUnknown_020388CC
- ldr r0, [r0]
- adds r0, 0x7F
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- ldrh r2, [r0]
- ldrh r0, [r0, 0x4]
- mov r8, r0
- ldrh r6, [r4, 0x4]
- ldrh r3, [r4, 0x6]
-_080FB4CC:
- mov r9, r6
- ldr r4, _080FB54C @ =gUnknown_020388CC
- ldr r0, [r4]
- ldrh r5, [r0, 0x14]
- lsls r0, r5, 3
- ldr r1, _080FB550 @ =gRegionMapLocations
- adds r0, r1
- mov r10, r0
- ldrb r7, [r0, 0x2]
- adds r0, r2, 0
- adds r1, r7, 0
- str r3, [sp]
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r3, [sp]
- cmp r1, 0
- bne _080FB4F4
- movs r1, 0x1
-_080FB4F4:
- adds r0, r6, 0
- str r3, [sp]
- bl __udivsi3
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r3, [sp]
- cmp r6, r7
- bcc _080FB50C
- subs r0, r7, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080FB50C:
- mov r2, r10
- ldrb r4, [r2, 0x3]
- mov r0, r8
- adds r1, r4, 0
- str r3, [sp]
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r3, [sp]
- cmp r1, 0
- bne _080FB526
- movs r1, 0x1
-_080FB526:
- adds r0, r3, 0
- bl __udivsi3
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, r4
- bcc _080FB53A
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
-_080FB53A:
- cmp r5, 0x24
- beq _080FB59C
- cmp r5, 0x24
- bgt _080FB554
- cmp r5, 0x1D
- beq _080FB55E
- b _080FB5BE
- .align 2, 0
-_080FB548: .4byte gSaveBlock1 + 0x14
-_080FB54C: .4byte gUnknown_020388CC
-_080FB550: .4byte gRegionMapLocations
-_080FB554:
- cmp r5, 0x29
- beq _080FB566
- cmp r5, 0x33
- beq _080FB566
- b _080FB5BE
-_080FB55E:
- cmp r3, 0
- beq _080FB5BE
- movs r6, 0
- b _080FB5BE
-_080FB566:
- movs r6, 0
- ldr r1, _080FB598 @ =gSaveBlock1
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x20
- ble _080FB574
- movs r6, 0x1
-_080FB574:
- cmp r0, 0x33
- ble _080FB57E
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080FB57E:
- movs r3, 0
- movs r2, 0x2
- ldrsh r0, [r1, r2]
- cmp r0, 0x25
- ble _080FB58A
- movs r3, 0x1
-_080FB58A:
- cmp r0, 0x38
- ble _080FB5BE
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- b _080FB5BE
- .align 2, 0
-_080FB598: .4byte gSaveBlock1
-_080FB59C:
- movs r6, 0
- mov r0, r9
- cmp r0, 0xE
- bls _080FB5A6
- movs r6, 0x1
-_080FB5A6:
- mov r1, r9
- cmp r1, 0x1C
- bls _080FB5B2
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080FB5B2:
- mov r2, r9
- cmp r2, 0x36
- bls _080FB5BE
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080FB5BE:
- ldr r0, _080FB5F8 @ =gUnknown_020388CC
- ldr r2, [r0]
- ldrh r0, [r2, 0x14]
- lsls r0, 3
- ldr r1, _080FB5FC @ =gRegionMapLocations
- adds r0, r1
- ldrb r0, [r0]
- adds r0, r6, r0
- adds r0, 0x1
- adds r1, r2, 0
- adds r1, 0x54
- strh r0, [r1]
- ldrh r0, [r2, 0x14]
- lsls r0, 3
- ldr r1, _080FB5FC @ =gRegionMapLocations
- adds r0, r1
- ldrb r0, [r0, 0x1]
- adds r0, r3, r0
- adds r0, 0x2
- adds r2, 0x56
- strh r0, [r2]
-_080FB5E8:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB5F8: .4byte gUnknown_020388CC
-_080FB5FC: .4byte gRegionMapLocations
- thumb_func_end sub_80FB32C
-
- thumb_func_start sub_80FB600
-sub_80FB600: @ 80FB600
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r7, 0
- movs r0, 0
- mov r8, r0
- mov r4, sp
- adds r4, 0x1
- mov r5, sp
- adds r5, 0x2
- add r6, sp, 0x4
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl GetSSTidalLocation
- lsls r0, 24
- lsrs r0, 24
- mov r10, r5
- cmp r0, 0x4
- bhi _080FB694
- lsls r0, 2
- ldr r1, _080FB63C @ =_080FB640
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FB63C: .4byte _080FB640
- .align 2, 0
-_080FB640:
- .4byte _080FB694
- .4byte _080FB654
- .4byte _080FB664
- .4byte _080FB674
- .4byte _080FB684
-_080FB654:
- ldr r2, _080FB660 @ =gUnknown_020388CC
- ldr r1, [r2]
- movs r0, 0x8
- strh r0, [r1, 0x14]
- b _080FB710
- .align 2, 0
-_080FB660: .4byte gUnknown_020388CC
-_080FB664:
- ldr r2, _080FB670 @ =gUnknown_020388CC
- ldr r1, [r2]
- movs r0, 0xC
- strh r0, [r1, 0x14]
- b _080FB710
- .align 2, 0
-_080FB670: .4byte gUnknown_020388CC
-_080FB674:
- ldr r2, _080FB680 @ =gUnknown_020388CC
- ldr r1, [r2]
- movs r0, 0x27
- strh r0, [r1, 0x14]
- b _080FB710
- .align 2, 0
-_080FB680: .4byte gUnknown_020388CC
-_080FB684:
- ldr r2, _080FB690 @ =gUnknown_020388CC
- ldr r1, [r2]
- movs r0, 0x2E
- strh r0, [r1, 0x14]
- b _080FB710
- .align 2, 0
-_080FB690: .4byte gUnknown_020388CC
-_080FB694:
- mov r0, sp
- ldrb r0, [r0]
- ldrb r1, [r4]
- bl get_mapheader_by_bank_and_number
- ldr r1, _080FB750 @ =gUnknown_020388CC
- mov r9, r1
- ldr r2, [r1]
- ldrb r1, [r0, 0x14]
- strh r1, [r2, 0x14]
- ldr r6, [r0]
- ldr r1, _080FB754 @ =gRegionMapLocations
- ldrh r0, [r2, 0x14]
- lsls r0, 3
- adds r5, r0, r1
- ldrb r4, [r5, 0x2]
- ldr r0, [r6]
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080FB6C6
- movs r1, 0x1
-_080FB6C6:
- mov r2, r10
- movs r3, 0
- ldrsh r0, [r2, r3]
- bl __divsi3
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- cmp r8, r4
- bcc _080FB6E2
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
-_080FB6E2:
- ldrb r4, [r5, 0x3]
- ldr r0, [r6, 0x4]
- adds r1, r4, 0
- bl __divsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080FB6F6
- movs r1, 0x1
-_080FB6F6:
- mov r2, sp
- movs r3, 0x4
- ldrsh r0, [r2, r3]
- bl __divsi3
- lsls r0, 16
- lsrs r7, r0, 16
- mov r2, r9
- cmp r7, r4
- bcc _080FB710
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
-_080FB710:
- ldr r0, [r2]
- adds r0, 0x7F
- movs r1, 0
- strb r1, [r0]
- ldr r2, [r2]
- ldr r3, _080FB754 @ =gRegionMapLocations
- ldrh r0, [r2, 0x14]
- lsls r0, 3
- adds r0, r3
- ldrb r0, [r0]
- add r0, r8
- adds r0, 0x1
- adds r1, r2, 0
- adds r1, 0x54
- strh r0, [r1]
- ldrh r0, [r2, 0x14]
- lsls r0, 3
- adds r0, r3
- ldrb r0, [r0, 0x1]
- adds r0, r7, r0
- adds r0, 0x2
- adds r2, 0x56
- strh r0, [r2]
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB750: .4byte gUnknown_020388CC
-_080FB754: .4byte gRegionMapLocations
- thumb_func_end sub_80FB600
-
- thumb_func_start sub_80FB758
-sub_80FB758: @ 80FB758
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x58
- bls _080FB764
- b _080FB9A0
-_080FB764:
- lsls r0, 2
- ldr r1, _080FB770 @ =_080FB774
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FB770: .4byte _080FB774
- .align 2, 0
-_080FB774:
- .4byte _080FB8DC
- .4byte _080FB8E4
- .4byte _080FB8EA
- .4byte _080FB8F4
- .4byte _080FB8FC
- .4byte _080FB904
- .4byte _080FB90C
- .4byte _080FB914
- .4byte _080FB91C
- .4byte _080FB924
- .4byte _080FB92C
- .4byte _080FB934
- .4byte _080FB93C
- .4byte _080FB944
- .4byte _080FB94C
- .4byte _080FB954
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB96C
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB988
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB9A0
- .4byte _080FB8D8
-_080FB8D8:
- movs r0, 0
- b _080FB9A2
-_080FB8DC:
- ldr r0, _080FB8E0 @ =0x0000080f
- b _080FB956
- .align 2, 0
-_080FB8E0: .4byte 0x0000080f
-_080FB8E4:
- movs r0, 0x81
- lsls r0, 4
- b _080FB956
-_080FB8EA:
- ldr r0, _080FB8F0 @ =0x00000811
- b _080FB956
- .align 2, 0
-_080FB8F0: .4byte 0x00000811
-_080FB8F4:
- ldr r0, _080FB8F8 @ =0x00000812
- b _080FB956
- .align 2, 0
-_080FB8F8: .4byte 0x00000812
-_080FB8FC:
- ldr r0, _080FB900 @ =0x00000813
- b _080FB956
- .align 2, 0
-_080FB900: .4byte 0x00000813
-_080FB904:
- ldr r0, _080FB908 @ =0x00000814
- b _080FB956
- .align 2, 0
-_080FB908: .4byte 0x00000814
-_080FB90C:
- ldr r0, _080FB910 @ =0x00000815
- b _080FB956
- .align 2, 0
-_080FB910: .4byte 0x00000815
-_080FB914:
- ldr r0, _080FB918 @ =0x00000816
- b _080FB956
- .align 2, 0
-_080FB918: .4byte 0x00000816
-_080FB91C:
- ldr r0, _080FB920 @ =0x00000817
- b _080FB956
- .align 2, 0
-_080FB920: .4byte 0x00000817
-_080FB924:
- ldr r0, _080FB928 @ =0x00000818
- b _080FB956
- .align 2, 0
-_080FB928: .4byte 0x00000818
-_080FB92C:
- ldr r0, _080FB930 @ =0x00000819
- b _080FB956
- .align 2, 0
-_080FB930: .4byte 0x00000819
-_080FB934:
- ldr r0, _080FB938 @ =0x0000081a
- b _080FB956
- .align 2, 0
-_080FB938: .4byte 0x0000081a
-_080FB93C:
- ldr r0, _080FB940 @ =0x0000081b
- b _080FB956
- .align 2, 0
-_080FB940: .4byte 0x0000081b
-_080FB944:
- ldr r0, _080FB948 @ =0x0000081c
- b _080FB956
- .align 2, 0
-_080FB948: .4byte 0x0000081c
-_080FB94C:
- ldr r0, _080FB950 @ =0x0000081d
- b _080FB956
- .align 2, 0
-_080FB950: .4byte 0x0000081d
-_080FB954:
- ldr r0, _080FB968 @ =0x0000081e
-_080FB956:
- bl FlagGet
- lsls r0, 24
- movs r1, 0x3
- cmp r0, 0
- beq _080FB964
- movs r1, 0x2
-_080FB964:
- adds r0, r1, 0
- b _080FB9A2
- .align 2, 0
-_080FB968: .4byte 0x0000081e
-_080FB96C:
- ldr r0, _080FB984 @ =0x00000848
- bl FlagGet
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- negs r0, r1
- orrs r0, r1
- asrs r0, 31
- movs r1, 0x4
- ands r0, r1
- b _080FB9A2
- .align 2, 0
-_080FB984: .4byte 0x00000848
-_080FB988:
- ldr r0, _080FB99C @ =0x00000849
- bl FlagGet
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- b _080FB9A2
- .align 2, 0
-_080FB99C: .4byte 0x00000849
-_080FB9A0:
- movs r0, 0x1
-_080FB9A2:
- pop {r1}
- bx r1
- thumb_func_end sub_80FB758
-
- thumb_func_start GetRegionMapSectionAt_
-GetRegionMapSectionAt_: @ 80FB9A8
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- bl GetRegionMapSectionAt
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end GetRegionMapSectionAt_
-
- thumb_func_start sub_80FB9C0
-sub_80FB9C0: @ 80FB9C0
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r0, _080FB9E8 @ =gUnknown_083E7684
- ldrh r1, [r0]
- adds r4, r0, 0
- cmp r1, 0x58
- beq _080FB9FC
- adds r5, r4, 0
- adds r6, r4, 0x2
-_080FB9D6:
- lsls r1, r2, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- cmp r0, r3
- bne _080FB9EC
- adds r0, r1, r6
- ldrh r0, [r0]
- b _080FB9FE
- .align 2, 0
-_080FB9E8: .4byte gUnknown_083E7684
-_080FB9EC:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r0, r2, 2
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0x58
- bne _080FB9D6
-_080FB9FC:
- adds r0, r3, 0
-_080FB9FE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80FB9C0
-
- thumb_func_start sub_80FBA04
-sub_80FBA04: @ 80FBA04
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl sub_80FB9C0
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_80FBA04
-
- thumb_func_start sub_80FBA18
-sub_80FBA18: @ 80FBA18
- push {r4-r6,lr}
- ldr r0, _080FBA2C @ =gUnknown_020388CC
- ldr r1, [r0]
- ldrh r0, [r1, 0x14]
- cmp r0, 0x58
- bne _080FBA30
- movs r0, 0
- strb r0, [r1, 0x17]
- b _080FBA96
- .align 2, 0
-_080FBA2C: .4byte gUnknown_020388CC
-_080FBA30:
- adds r0, r1, 0
- adds r0, 0x78
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FBA40
- adds r0, r1, 0
- adds r0, 0x54
- b _080FBA44
-_080FBA40:
- adds r0, r1, 0
- adds r0, 0x64
-_080FBA44:
- ldrh r4, [r0]
- adds r0, 0x2
- ldrh r5, [r0]
- movs r6, 0
- b _080FBA70
-_080FBA4E:
- subs r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetRegionMapSectionAt
- ldr r1, _080FBA8C @ =gUnknown_020388CC
- ldr r1, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1, 0x14]
- cmp r0, r1
- bne _080FBA70
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_080FBA70:
- cmp r4, 0x1
- bhi _080FBA4E
- adds r0, r5, 0
- bl sub_80FBAA0
- lsls r0, 24
- cmp r0, 0
- beq _080FBA90
- subs r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- movs r4, 0x1D
- b _080FBA70
- .align 2, 0
-_080FBA8C: .4byte gUnknown_020388CC
-_080FBA90:
- ldr r0, _080FBA9C @ =gUnknown_020388CC
- ldr r0, [r0]
- strb r6, [r0, 0x17]
-_080FBA96:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBA9C: .4byte gUnknown_020388CC
- thumb_func_end sub_80FBA18
-
- thumb_func_start sub_80FBAA0
-sub_80FBAA0: @ 80FBAA0
- push {r4,r5,lr}
- lsls r0, 16
- ldr r1, _080FBAB4 @ =0xffff0000
- adds r0, r1
- lsrs r5, r0, 16
- ldr r0, _080FBAB8 @ =0x0000ffff
- cmp r5, r0
- bne _080FBAC0
- b _080FBAE2
- .align 2, 0
-_080FBAB4: .4byte 0xffff0000
-_080FBAB8: .4byte 0x0000ffff
-_080FBABC:
- movs r0, 0x1
- b _080FBAE4
-_080FBAC0:
- movs r4, 0x1
-_080FBAC2:
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetRegionMapSectionAt
- ldr r1, _080FBAEC @ =gUnknown_020388CC
- ldr r1, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r1, 0x14]
- cmp r0, r1
- beq _080FBABC
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1C
- bls _080FBAC2
-_080FBAE2:
- movs r0, 0
-_080FBAE4:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080FBAEC: .4byte gUnknown_020388CC
- thumb_func_end sub_80FBAA0
-
- thumb_func_start sub_80FBAF0
-sub_80FBAF0: @ 80FBAF0
- push {r4,lr}
- adds r2, r0, 0
- ldr r0, _080FBB34 @ =gUnknown_020388CC
- ldr r1, [r0]
- adds r3, r1, 0
- adds r3, 0x7A
- movs r0, 0
- ldrsb r0, [r3, r0]
- cmp r0, 0
- beq _080FBB2E
- adds r0, r1, 0
- adds r0, 0x7B
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 1
- ldrh r4, [r2, 0x20]
- adds r0, r4
- strh r0, [r2, 0x20]
- adds r0, r1, 0
- adds r0, 0x7C
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- lsls r0, 1
- ldrh r1, [r2, 0x22]
- adds r0, r1
- strh r0, [r2, 0x22]
- ldrb r0, [r3]
- subs r0, 0x1
- strb r0, [r3]
-_080FBB2E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBB34: .4byte gUnknown_020388CC
- thumb_func_end sub_80FBAF0
-
- thumb_func_start nullsub_66
-nullsub_66: @ 80FBB38
- bx lr
- thumb_func_end nullsub_66
-
- thumb_func_start sub_80FBB3C
-sub_80FBB3C: @ 80FBB3C
- push {r4-r7,lr}
- sub sp, 0x28
- lsls r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r1, _080FBBAC @ =gUnknown_083E76E8
- ldr r2, [r1, 0x4]
- ldr r1, [r1]
- str r1, [sp, 0x20]
- str r2, [sp, 0x24]
- mov r2, sp
- ldr r1, _080FBBB0 @ =gSpriteTemplate_83E76F0
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- lsrs r3, r0, 16
- add r2, sp, 0x18
- ldrh r1, [r2, 0x4]
- orrs r1, r0
- str r1, [r2, 0x4]
- mov r0, sp
- strh r3, [r0]
- ldr r0, _080FBBB4 @ =gUnknown_020388CC
- ldr r4, [r0]
- adds r0, r4, 0
- adds r0, 0x58
- strh r3, [r0]
- ldr r5, _080FBBB8 @ =0xffff0000
- add r1, sp, 0x20
- ldr r0, [r1, 0x4]
- ands r0, r5
- orrs r0, r6
- str r0, [r1, 0x4]
- mov r0, sp
- strh r6, [r0, 0x2]
- adds r3, r4, 0
- adds r0, r3, 0
- adds r0, 0x5A
- strh r6, [r0]
- adds r0, 0x1E
- ldrb r0, [r0]
- adds r7, r1, 0
- cmp r0, 0
- bne _080FBBC0
- movs r1, 0xC0
- lsls r1, 1
- adds r0, r3, r1
- str r0, [sp, 0x18]
- ldr r0, [r2, 0x4]
- ands r0, r5
- subs r1, 0x80
- orrs r0, r1
- str r0, [r2, 0x4]
- ldr r0, _080FBBBC @ =sub_80FBAF0
- b _080FBBD6
- .align 2, 0
-_080FBBAC: .4byte gUnknown_083E76E8
-_080FBBB0: .4byte gSpriteTemplate_83E76F0
-_080FBBB4: .4byte gUnknown_020388CC
-_080FBBB8: .4byte 0xffff0000
-_080FBBBC: .4byte sub_80FBAF0
-_080FBBC0:
- movs r3, 0xA0
- lsls r3, 2
- adds r0, r4, r3
- str r0, [sp, 0x18]
- ldr r0, [r2, 0x4]
- ands r0, r5
- movs r1, 0xC0
- lsls r1, 3
- orrs r0, r1
- str r0, [r2, 0x4]
- ldr r0, _080FBC38 @ =nullsub_66
-_080FBBD6:
- str r0, [sp, 0x14]
- adds r0, r2, 0
- bl LoadSpriteSheet
- adds r0, r7, 0
- bl LoadSpritePalette
- mov r0, sp
- movs r1, 0x38
- movs r2, 0x48
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _080FBC90
- ldr r4, _080FBC3C @ =gUnknown_020388CC
- ldr r2, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080FBC40 @ =gSprites
- adds r3, r0, r1
- str r3, [r2, 0x1C]
- adds r2, 0x78
- ldrb r0, [r2]
- cmp r0, 0x1
- bne _080FBC44
- ldrb r1, [r3, 0x3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r3, 0x3]
- ldr r2, [r4]
- ldr r1, [r2, 0x1C]
- ldrh r0, [r1, 0x20]
- subs r0, 0x8
- strh r0, [r1, 0x20]
- ldr r1, [r2, 0x1C]
- ldrh r0, [r1, 0x22]
- subs r0, 0x8
- strh r0, [r1, 0x22]
- ldr r0, [r2, 0x1C]
- movs r1, 0x1
- bl StartSpriteAnim
- b _080FBC6C
- .align 2, 0
-_080FBC38: .4byte nullsub_66
-_080FBC3C: .4byte gUnknown_020388CC
-_080FBC40: .4byte gSprites
-_080FBC44:
- ldrb r1, [r3, 0x3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r3, 0x3]
- ldr r1, [r4]
- ldr r2, [r1, 0x1C]
- adds r0, r1, 0
- adds r0, 0x54
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r2, 0x20]
- ldr r2, [r1, 0x1C]
- adds r1, 0x56
- ldrh r0, [r1]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r2, 0x22]
-_080FBC6C:
- ldr r4, _080FBC98 @ =gUnknown_020388CC
- ldr r0, [r4]
- ldr r1, [r0, 0x1C]
- movs r0, 0x2
- strh r0, [r1, 0x30]
- adds r0, r6, 0
- bl IndexOfSpritePaletteTag
- ldr r1, [r4]
- ldr r2, [r1, 0x1C]
- lsls r0, 24
- lsrs r0, 20
- ldr r4, _080FBC9C @ =0x00000101
- adds r0, r4
- strh r0, [r2, 0x32]
- ldr r1, [r1, 0x1C]
- movs r0, 0x1
- strh r0, [r1, 0x34]
-_080FBC90:
- add sp, 0x28
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBC98: .4byte gUnknown_020388CC
-_080FBC9C: .4byte 0x00000101
- thumb_func_end sub_80FBB3C
-
- thumb_func_start sub_80FBCA0
-sub_80FBCA0: @ 80FBCA0
- push {r4,lr}
- ldr r4, _080FBCCC @ =gUnknown_020388CC
- ldr r0, [r4]
- ldr r0, [r0, 0x1C]
- cmp r0, 0
- beq _080FBCC4
- bl DestroySprite
- ldr r0, [r4]
- adds r0, 0x58
- ldrh r0, [r0]
- bl FreeSpriteTilesByTag
- ldr r0, [r4]
- adds r0, 0x5A
- ldrh r0, [r0]
- bl FreeSpritePaletteByTag
-_080FBCC4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBCCC: .4byte gUnknown_020388CC
- thumb_func_end sub_80FBCA0
-
- thumb_func_start unref_sub_80FBCD0
-unref_sub_80FBCD0: @ 80FBCD0
- ldr r0, _080FBCDC @ =gUnknown_020388CC
- ldr r0, [r0]
- ldr r1, [r0, 0x1C]
- movs r0, 0x1
- strh r0, [r1, 0x34]
- bx lr
- .align 2, 0
-_080FBCDC: .4byte gUnknown_020388CC
- thumb_func_end unref_sub_80FBCD0
-
- thumb_func_start unref_sub_80FBCE0
-unref_sub_80FBCE0: @ 80FBCE0
- ldr r0, _080FBCEC @ =gUnknown_020388CC
- ldr r0, [r0]
- ldr r1, [r0, 0x1C]
- movs r0, 0
- strh r0, [r1, 0x34]
- bx lr
- .align 2, 0
-_080FBCEC: .4byte gUnknown_020388CC
- thumb_func_end unref_sub_80FBCE0
-
- thumb_func_start sub_80FBCF0
-sub_80FBCF0: @ 80FBCF0
- push {r4,r5,lr}
- sub sp, 0x28
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- ldr r2, _080FBD98 @ =gRegionMapBrendanIconTiles
- str r2, [sp, 0x18]
- movs r2, 0x80
- add r5, sp, 0x18
- lsrs r3, r0, 16
- orrs r0, r2
- str r0, [r5, 0x4]
- ldr r0, _080FBD9C @ =gRegionMapBrendanIconPalette
- str r0, [sp, 0x20]
- ldr r2, _080FBDA0 @ =0xffff0000
- add r4, sp, 0x20
- ldr r0, [r4, 0x4]
- ands r0, r2
- orrs r0, r1
- str r0, [r4, 0x4]
- mov r0, sp
- movs r2, 0
- strh r3, [r0]
- strh r1, [r0, 0x2]
- ldr r0, _080FBDA4 @ =gOamData_083E7708
- str r0, [sp, 0x4]
- ldr r0, _080FBDA8 @ =gSpriteAnimTable_083E7718
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, _080FBDAC @ =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, _080FBDB0 @ =SpriteCallbackDummy
- str r0, [sp, 0x14]
- ldr r0, _080FBDB4 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- cmp r0, 0x1
- bne _080FBD42
- ldr r0, _080FBDB8 @ =gRegionMapMayIconTiles
- str r0, [sp, 0x18]
- ldr r0, _080FBDBC @ =gRegionMapMayIconPalette
- str r0, [sp, 0x20]
-_080FBD42:
- adds r0, r5, 0
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl LoadSpritePalette
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080FBDC0 @ =gUnknown_020388CC
- ldr r2, [r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _080FBDC4 @ =gSprites
- adds r1, r0
- str r1, [r2, 0x20]
- adds r0, r2, 0
- adds r0, 0x78
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FBDCC
- adds r0, r2, 0
- adds r0, 0x74
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r1, 0x20]
- ldr r1, [r2, 0x20]
- adds r0, r2, 0
- adds r0, 0x76
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r1, 0x22]
- ldr r1, [r2, 0x20]
- ldr r0, _080FBDC8 @ =sub_80FBF34
- b _080FBDEA
- .align 2, 0
-_080FBD98: .4byte gRegionMapBrendanIconTiles
-_080FBD9C: .4byte gRegionMapBrendanIconPalette
-_080FBDA0: .4byte 0xffff0000
-_080FBDA4: .4byte gOamData_083E7708
-_080FBDA8: .4byte gSpriteAnimTable_083E7718
-_080FBDAC: .4byte gDummySpriteAffineAnimTable
-_080FBDB0: .4byte SpriteCallbackDummy
-_080FBDB4: .4byte gSaveBlock2
-_080FBDB8: .4byte gRegionMapMayIconTiles
-_080FBDBC: .4byte gRegionMapMayIconPalette
-_080FBDC0: .4byte gUnknown_020388CC
-_080FBDC4: .4byte gSprites
-_080FBDC8: .4byte sub_80FBF34
-_080FBDCC:
- adds r0, r2, 0
- adds r0, 0x74
- ldrh r0, [r0]
- lsls r0, 4
- subs r0, 0x30
- strh r0, [r1, 0x20]
- ldr r1, [r2, 0x20]
- adds r0, r2, 0
- adds r0, 0x76
- ldrh r0, [r0]
- lsls r0, 4
- subs r0, 0x42
- strh r0, [r1, 0x22]
- ldr r1, [r2, 0x20]
- ldr r0, _080FBDF4 @ =sub_80FBEA4
-_080FBDEA:
- str r0, [r1, 0x1C]
- add sp, 0x28
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBDF4: .4byte sub_80FBEA4
- thumb_func_end sub_80FBCF0
-
- thumb_func_start sub_80FBDF8
-sub_80FBDF8: @ 80FBDF8
- push {lr}
- ldr r3, _080FBE1C @ =gUnknown_020388CC
- ldr r0, [r3]
- ldr r2, [r0, 0x20]
- cmp r2, 0
- beq _080FBE16
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldr r0, [r3]
- ldr r1, [r0, 0x20]
- ldr r0, _080FBE20 @ =SpriteCallbackDummy
- str r0, [r1, 0x1C]
-_080FBE16:
- pop {r0}
- bx r0
- .align 2, 0
-_080FBE1C: .4byte gUnknown_020388CC
-_080FBE20: .4byte SpriteCallbackDummy
- thumb_func_end sub_80FBDF8
-
- thumb_func_start sub_80FBE24
-sub_80FBE24: @ 80FBE24
- push {lr}
- ldr r0, _080FBE5C @ =gUnknown_020388CC
- ldr r3, [r0]
- ldr r1, [r3, 0x20]
- cmp r1, 0
- beq _080FBE9A
- adds r0, r3, 0
- adds r0, 0x78
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FBE64
- adds r0, r3, 0
- adds r0, 0x74
- ldrh r0, [r0]
- lsls r0, 4
- subs r0, 0x30
- strh r0, [r1, 0x20]
- ldr r1, [r3, 0x20]
- adds r0, r3, 0
- adds r0, 0x76
- ldrh r0, [r0]
- lsls r0, 4
- subs r0, 0x42
- strh r0, [r1, 0x22]
- ldr r1, [r3, 0x20]
- ldr r0, _080FBE60 @ =sub_80FBEA4
- b _080FBE8C
- .align 2, 0
-_080FBE5C: .4byte gUnknown_020388CC
-_080FBE60: .4byte sub_80FBEA4
-_080FBE64:
- adds r0, r3, 0
- adds r0, 0x74
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- movs r2, 0
- strh r0, [r1, 0x20]
- ldr r1, [r3, 0x20]
- adds r0, r3, 0
- adds r0, 0x76
- ldrh r0, [r0]
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r1, 0x22]
- ldr r0, [r3, 0x20]
- strh r2, [r0, 0x24]
- ldr r0, [r3, 0x20]
- strh r2, [r0, 0x26]
- ldr r1, [r3, 0x20]
- ldr r0, _080FBEA0 @ =sub_80FBF34
-_080FBE8C:
- str r0, [r1, 0x1C]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_080FBE9A:
- pop {r0}
- bx r0
- .align 2, 0
-_080FBEA0: .4byte sub_80FBF34
- thumb_func_end sub_80FBE24
-
- thumb_func_start sub_80FBEA4
-sub_80FBEA4: @ 80FBEA4
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, _080FBF08 @ =gUnknown_020388CC
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x5C
- movs r4, 0
- ldrsh r2, [r0, r4]
- lsls r2, 1
- negs r2, r2
- strh r2, [r3, 0x24]
- adds r1, 0x5E
- movs r4, 0
- ldrsh r0, [r1, r4]
- lsls r0, 1
- negs r0, r0
- strh r0, [r3, 0x26]
- ldrh r1, [r3, 0x22]
- adds r1, r0
- adds r0, r3, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- adds r0, r1
- strh r0, [r3, 0x2E]
- ldrh r1, [r3, 0x20]
- adds r1, r2
- adds r2, r3, 0
- adds r2, 0x28
- ldrb r2, [r2]
- lsls r2, 24
- asrs r2, 24
- adds r2, r1
- strh r2, [r3, 0x30]
- adds r0, 0x8
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB0
- bhi _080FBF04
- lsls r0, r2, 16
- asrs r2, r0, 16
- movs r0, 0x8
- negs r0, r0
- cmp r2, r0
- blt _080FBF04
- cmp r2, 0xF8
- ble _080FBF0C
-_080FBF04:
- movs r0, 0
- b _080FBF0E
- .align 2, 0
-_080FBF08: .4byte gUnknown_020388CC
-_080FBF0C:
- movs r0, 0x1
-_080FBF0E:
- strh r0, [r3, 0x32]
- movs r1, 0x32
- ldrsh r0, [r3, r1]
- cmp r0, 0x1
- bne _080FBF20
- adds r0, r3, 0
- bl sub_80FBF40
- b _080FBF2C
-_080FBF20:
- adds r0, r3, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_080FBF2C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80FBEA4
-
- thumb_func_start sub_80FBF34
-sub_80FBF34: @ 80FBF34
- push {lr}
- bl sub_80FBF40
- pop {r0}
- bx r0
- thumb_func_end sub_80FBF34
-
- thumb_func_start sub_80FBF40
-sub_80FBF40: @ 80FBF40
- push {lr}
- adds r2, r0, 0
- ldr r0, _080FBF80 @ =gUnknown_020388CC
- ldr r0, [r0]
- adds r0, 0x7E
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FBF84
- ldrh r0, [r2, 0x3C]
- adds r0, 0x1
- strh r0, [r2, 0x3C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _080FBF90
- movs r0, 0
- strh r0, [r2, 0x3C]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsrs r1, r2, 2
- movs r0, 0x1
- eors r1, r0
- ands r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _080FBF90
- .align 2, 0
-_080FBF80: .4byte gUnknown_020388CC
-_080FBF84:
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_080FBF90:
- pop {r0}
- bx r0
- thumb_func_end sub_80FBF40
-
- thumb_func_start sub_80FBF94
-sub_80FBF94: @ 80FBF94
- push {lr}
- ldr r0, _080FBFB0 @ =gUnknown_020388CC
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x7F
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FBFAA
- adds r1, 0x7E
- movs r0, 0x1
- strb r0, [r1]
-_080FBFAA:
- pop {r0}
- bx r0
- .align 2, 0
-_080FBFB0: .4byte gUnknown_020388CC
- thumb_func_end sub_80FBF94
-
- thumb_func_start sub_80FBFB4
-sub_80FBFB4: @ 80FBFB4
- push {lr}
- adds r3, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- cmp r1, 0x56
- bne _080FBFCA
- bl GetSecretBaseMapName
- b _080FBFF2
-_080FBFCA:
- cmp r1, 0x57
- bhi _080FBFE4
- ldr r0, _080FBFE0 @ =gRegionMapLocations
- lsls r1, 3
- adds r0, 0x4
- adds r1, r0
- ldr r1, [r1]
- adds r0, r3, 0
- bl StringCopy
- b _080FBFF2
- .align 2, 0
-_080FBFE0: .4byte gRegionMapLocations
-_080FBFE4:
- cmp r2, 0
- bne _080FBFEA
- movs r2, 0x12
-_080FBFEA:
- adds r0, r3, 0
- movs r1, 0
- bl StringFill
-_080FBFF2:
- pop {r1}
- bx r1
- thumb_func_end sub_80FBFB4
-
- thumb_func_start CopyMapName
-CopyMapName: @ 80FBFF8
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0x56
- beq _080FC014
- cmp r1, 0x57
- bne _080FC020
- ldr r1, _080FC010 @ =gOtherText_Ferry
- bl StringCopy
- b _080FC026
- .align 2, 0
-_080FC010: .4byte gOtherText_Ferry
-_080FC014:
- ldr r1, _080FC01C @ =gOtherText_SecretBase
- bl StringCopy
- b _080FC026
- .align 2, 0
-_080FC01C: .4byte gOtherText_SecretBase
-_080FC020:
- movs r2, 0
- bl sub_80FBFB4
-_080FC026:
- pop {r1}
- bx r1
- thumb_func_end CopyMapName
-
- thumb_func_start CopyLocationName
-CopyLocationName: @ 80FC02C
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- cmp r1, 0x42
- beq _080FC03C
- bl CopyMapName
- b _080FC042
-_080FC03C:
- ldr r1, _080FC048 @ =gOtherText_Hideout
- bl StringCopy
-_080FC042:
- pop {r1}
- bx r1
- .align 2, 0
-_080FC048: .4byte gOtherText_Hideout
- thumb_func_end CopyLocationName
-
- thumb_func_start sub_80FC04C
-sub_80FC04C: @ 80FC04C
- push {r4,r5,lr}
- ldr r5, [sp, 0xC]
- lsls r0, 16
- ldr r4, _080FC070 @ =gRegionMapLocations
- lsrs r0, 13
- adds r0, r4
- ldrb r4, [r0]
- strh r4, [r1]
- ldrb r1, [r0, 0x1]
- strh r1, [r2]
- ldrb r1, [r0, 0x2]
- strh r1, [r3]
- ldrb r0, [r0, 0x3]
- strh r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC070: .4byte gRegionMapLocations
- thumb_func_end sub_80FC04C
-
- thumb_func_start sub_80FC074
-sub_80FC074: @ 80FC074
- push {r4,lr}
- ldr r0, _080FC090 @ =gMain
- ldr r1, _080FC094 @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x9
- bls _080FC084
- b _080FC1F2
-_080FC084:
- lsls r0, 2
- ldr r1, _080FC098 @ =_080FC09C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FC090: .4byte gMain
-_080FC094: .4byte 0x0000043c
-_080FC098: .4byte _080FC09C
- .align 2, 0
-_080FC09C:
- .4byte _080FC0C4
- .4byte _080FC104
- .4byte _080FC110
- .4byte _080FC120
- .4byte _080FC15C
- .4byte _080FC170
- .4byte _080FC184
- .4byte _080FC1A4
- .4byte _080FC1AA
- .4byte _080FC1C4
-_080FC0C4:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0x80
- lsls r0, 19
- movs r1, 0
- strh r1, [r0]
- adds r0, 0x10
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- subs r0, 0x2
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x2
- strh r1, [r0]
- bl ResetPaletteFade
- bl ResetSpriteData
- bl FreeSpriteTileRanges
- bl FreeAllSpritePalettes
- b _080FC1E6
-_080FC104:
- ldr r0, _080FC10C @ =gWindowConfig_81E7224
- bl SetUpWindowConfig
- b _080FC1E6
- .align 2, 0
-_080FC10C: .4byte gWindowConfig_81E7224
-_080FC110:
- ldr r0, _080FC11C @ =gWindowConfig_81E7224
- bl InitMenuWindow
- bl MenuZeroFillScreen
- b _080FC1E6
- .align 2, 0
-_080FC11C: .4byte gWindowConfig_81E7224
-_080FC120:
- ldr r4, _080FC158 @ =0x02000008
- adds r0, r4, 0
- movs r1, 0
- bl sub_80FA8EC
- movs r0, 0
- movs r1, 0
- bl sub_80FBB3C
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80FBCF0
- adds r1, r4, 0
- subs r1, 0x8
- ldrh r0, [r1, 0x1C]
- strh r0, [r1, 0x6]
- movs r2, 0xA4
- lsls r2, 4
- adds r4, r2
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0xC
- bl StringFill
- bl sub_80FC254
- b _080FC1E6
- .align 2, 0
-_080FC158: .4byte 0x02000008
-_080FC15C:
- ldr r0, _080FC168 @ =gUnknown_083E773C
- ldr r1, _080FC16C @ =0x0600c000
- bl LZ77UnCompVram
- b _080FC1E6
- .align 2, 0
-_080FC168: .4byte gUnknown_083E773C
-_080FC16C: .4byte 0x0600c000
-_080FC170:
- ldr r0, _080FC17C @ =gUnknown_083E7774
- ldr r1, _080FC180 @ =0x0600f000
- bl LZ77UnCompVram
- b _080FC1E6
- .align 2, 0
-_080FC17C: .4byte gUnknown_083E7774
-_080FC180: .4byte 0x0600f000
-_080FC184:
- ldr r0, _080FC19C @ =gUnknown_083E771C
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _080FC1A0 @ =gOtherText_FlyToWhere
- movs r1, 0x1
- movs r2, 0x90
- movs r3, 0x1
- bl MenuPrint_PixelCoords
- b _080FC1E6
- .align 2, 0
-_080FC19C: .4byte gUnknown_083E771C
-_080FC1A0: .4byte gOtherText_FlyToWhere
-_080FC1A4:
- bl sub_80FC31C
- b _080FC1E6
-_080FC1AA:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, _080FC1C0 @ =sub_80FC214
- bl SetVBlankCallback
- b _080FC1E6
- .align 2, 0
-_080FC1C0: .4byte sub_80FC214
-_080FC1C4:
- ldr r1, _080FC1F8 @ =REG_BLDCNT
- movs r0, 0
- strh r0, [r1]
- subs r1, 0x46
- ldr r2, _080FC1FC @ =0x00001e0d
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xA
- ldr r2, _080FC200 @ =0x00001741
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _080FC204 @ =sub_80FC5B4
- bl sub_80FC244
- ldr r0, _080FC208 @ =sub_80FC228
- bl SetMainCallback2
-_080FC1E6:
- ldr r1, _080FC20C @ =gMain
- ldr r0, _080FC210 @ =0x0000043c
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080FC1F2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC1F8: .4byte REG_BLDCNT
-_080FC1FC: .4byte 0x00001e0d
-_080FC200: .4byte 0x00001741
-_080FC204: .4byte sub_80FC5B4
-_080FC208: .4byte sub_80FC228
-_080FC20C: .4byte gMain
-_080FC210: .4byte 0x0000043c
- thumb_func_end sub_80FC074
-
- thumb_func_start sub_80FC214
-sub_80FC214: @ 80FC214
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80FC214
-
- thumb_func_start sub_80FC228
-sub_80FC228: @ 80FC228
- push {lr}
- ldr r0, _080FC240 @ =0x02000000
- ldr r0, [r0]
- bl _call_via_r0
- bl AnimateSprites
- bl BuildOamBuffer
- pop {r0}
- bx r0
- .align 2, 0
-_080FC240: .4byte 0x02000000
- thumb_func_end sub_80FC228
-
- thumb_func_start sub_80FC244
-sub_80FC244: @ 80FC244
- ldr r1, _080FC250 @ =0x02000000
- str r0, [r1]
- movs r0, 0
- strh r0, [r1, 0x4]
- bx lr
- .align 2, 0
-_080FC250: .4byte 0x02000000
- thumb_func_end sub_80FC244
-
- thumb_func_start sub_80FC254
-sub_80FC254: @ 80FC254
- push {r4,r5,lr}
- ldr r4, _080FC2AC @ =0x02000000
- ldrb r0, [r4, 0x1E]
- cmp r0, 0x2
- beq _080FC262
- cmp r0, 0x4
- bne _080FC2EC
-_080FC262:
- movs r1, 0
- ldr r2, _080FC2B0 @ =gUnknown_083E79C0
- adds r5, r4, 0
-_080FC268:
- lsls r0, r1, 3
- adds r4, r0, r2
- ldrh r0, [r5, 0x1C]
- ldrh r3, [r4, 0x4]
- cmp r0, r3
- bne _080FC2B4
- ldrh r0, [r4, 0x6]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080FC2BE
- movs r0, 0x10
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- adds r0, r5, 0
- adds r0, 0x8
- movs r1, 0x11
- movs r2, 0xF
- bl MenuPrint
- ldrb r0, [r5, 0x1F]
- ldr r1, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1D
- movs r2, 0x11
- bl MenuPrint_RightAligned
- b _080FC310
- .align 2, 0
-_080FC2AC: .4byte 0x02000000
-_080FC2B0: .4byte gUnknown_083E79C0
-_080FC2B4:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- beq _080FC268
-_080FC2BE:
- movs r0, 0
- cmp r0, 0
- bne _080FC310
- movs r0, 0x10
- movs r1, 0x10
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r0, _080FC2E8 @ =0x02000008
- movs r1, 0x11
- movs r2, 0x11
- bl MenuPrint
- movs r0, 0x10
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0xF
- bl MenuZeroFillWindowRect
- b _080FC310
- .align 2, 0
-_080FC2E8: .4byte 0x02000008
-_080FC2EC:
- movs r0, 0x10
- movs r1, 0x10
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r1, _080FC318 @ =0x00000a48
- adds r0, r4, r1
- movs r1, 0x11
- movs r2, 0x11
- bl MenuPrint
- movs r0, 0x10
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0xF
- bl MenuZeroFillWindowRect
-_080FC310:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC318: .4byte 0x00000a48
- thumb_func_end sub_80FC254
-
- thumb_func_start sub_80FC31C
-sub_80FC31C: @ 80FC31C
- push {r4,lr}
- sub sp, 0x8
- ldr r0, _080FC360 @ =gUnknown_083E784C
- ldr r4, _080FC364 @ =0x02000888
- adds r1, r4, 0
- bl LZ77UnCompWram
- str r4, [sp]
- ldr r1, _080FC368 @ =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r1
- movs r1, 0xE0
- lsls r1, 1
- orrs r0, r1
- ldr r1, _080FC36C @ =0x0000ffff
- ands r0, r1
- movs r1, 0x80
- lsls r1, 10
- orrs r0, r1
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadSpriteSheet
- ldr r0, _080FC370 @ =gUnknown_083E79CC
- bl LoadSpritePalette
- bl sub_80FC374
- bl sub_80FC484
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC360: .4byte gUnknown_083E784C
-_080FC364: .4byte 0x02000888
-_080FC368: .4byte 0xffff0000
-_080FC36C: .4byte 0x0000ffff
-_080FC370: .4byte gUnknown_083E79CC
- thumb_func_end sub_80FC31C
-
- thumb_func_start sub_80FC374
-sub_80FC374: @ 80FC374
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r0, _080FC3D4 @ =0x0000080f
- str r0, [sp, 0xC]
- movs r1, 0
- mov r9, r1
- mov r2, sp
- adds r2, 0x6
- str r2, [sp, 0x14]
- mov r3, sp
- adds r3, 0xA
- str r3, [sp, 0x18]
- mov r0, sp
- adds r0, 0x8
- str r0, [sp, 0x10]
- add r1, sp, 0x4
- mov r10, r1
-_080FC39E:
- ldr r2, [sp, 0x18]
- str r2, [sp]
- mov r0, r9
- add r1, sp, 0x4
- mov r2, sp
- adds r2, 0x6
- ldr r3, [sp, 0x10]
- bl sub_80FC04C
- mov r3, r10
- ldrh r0, [r3]
- adds r0, 0x1
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r3]
- mov r1, sp
- ldrh r0, [r1, 0x6]
- adds r0, 0x2
- lsls r0, 3
- adds r0, 0x4
- strh r0, [r1, 0x6]
- ldr r2, [sp, 0x10]
- ldrh r0, [r2]
- cmp r0, 0x2
- bne _080FC3D8
- movs r7, 0x1
- b _080FC3E4
- .align 2, 0
-_080FC3D4: .4byte 0x0000080f
-_080FC3D8:
- ldr r3, [sp, 0x18]
- ldrh r0, [r3]
- movs r7, 0
- cmp r0, 0x2
- bne _080FC3E4
- movs r7, 0x2
-_080FC3E4:
- mov r0, r10
- movs r2, 0
- ldrsh r1, [r0, r2]
- ldr r3, [sp, 0x14]
- movs r0, 0
- ldrsh r2, [r3, r0]
- ldr r0, _080FC430 @ =gSpriteTemplate_83E7A38
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080FC458
- ldr r1, _080FC434 @ =gSprites
- mov r8, r1
- lsls r4, r5, 4
- adds r0, r4, r5
- lsls r6, r0, 2
- adds r2, r6, r1
- lsls r3, r7, 6
- ldrb r1, [r2, 0x1]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0x1]
- ldr r0, [sp, 0xC]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080FC43C
- mov r0, r8
- adds r0, 0x1C
- adds r0, r6, r0
- ldr r1, _080FC438 @ =sub_80FC55C
- str r1, [r0]
- b _080FC442
- .align 2, 0
-_080FC430: .4byte gSpriteTemplate_83E7A38
-_080FC434: .4byte gSprites
-_080FC438: .4byte sub_80FC55C
-_080FC43C:
- adds r0, r7, 0x3
- lsls r0, 16
- lsrs r7, r0, 16
-_080FC442:
- adds r4, r5
- lsls r4, 2
- ldr r0, _080FC480 @ =gSprites
- adds r4, r0
- lsls r1, r7, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- mov r2, r9
- strh r2, [r4, 0x2E]
-_080FC458:
- ldr r0, [sp, 0xC]
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- mov r0, r9
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- cmp r0, 0xF
- bls _080FC39E
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC480: .4byte gSprites
- thumb_func_end sub_80FC374
-
- thumb_func_start sub_80FC484
-sub_80FC484: @ 80FC484
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- movs r0, 0
- mov r8, r0
- ldr r6, _080FC54C @ =gUnknown_083E79D4
- ldrh r0, [r6, 0x2]
- cmp r0, 0x58
- beq _080FC53C
- mov r5, sp
- adds r5, 0x6
- add r7, sp, 0x4
- ldr r1, _080FC550 @ =gSprites
- mov r9, r1
- movs r0, 0x1C
- add r0, r9
- mov r10, r0
-_080FC4AC:
- mov r1, r8
- lsls r4, r1, 2
- adds r0, r4, r6
- ldrh r0, [r0]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080FC524
- adds r0, r6, 0x2
- adds r0, r4, r0
- ldrh r6, [r0]
- mov r0, sp
- adds r0, 0xA
- str r0, [sp]
- adds r0, r6, 0
- add r1, sp, 0x4
- adds r2, r5, 0
- add r3, sp, 0x8
- bl sub_80FC04C
- ldrh r0, [r7]
- adds r0, 0x1
- lsls r0, 3
- strh r0, [r7]
- ldrh r0, [r5]
- adds r0, 0x2
- lsls r0, 3
- strh r0, [r5]
- movs r0, 0
- ldrsh r1, [r7, r0]
- movs r0, 0
- ldrsh r2, [r5, r0]
- ldr r0, _080FC554 @ =gSpriteTemplate_83E7A38
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080FC524
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- mov r1, r9
- adds r4, r2, r1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r4, 0x3]
- add r2, r10
- ldr r0, _080FC558 @ =sub_80FC55C
- str r0, [r2]
- adds r0, r4, 0
- movs r1, 0x6
- bl StartSpriteAnim
- strh r6, [r4, 0x2E]
-_080FC524:
- mov r0, r8
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- ldr r6, _080FC54C @ =gUnknown_083E79D4
- lsls r0, 2
- adds r1, r6, 0x2
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0x58
- bne _080FC4AC
-_080FC53C:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC54C: .4byte gUnknown_083E79D4
-_080FC550: .4byte gSprites
-_080FC554: .4byte gSpriteTemplate_83E7A38
-_080FC558: .4byte sub_80FC55C
- thumb_func_end sub_80FC484
-
- thumb_func_start sub_80FC55C
-sub_80FC55C: @ 80FC55C
- push {lr}
- adds r2, r0, 0
- ldr r0, _080FC59C @ =0x02000000
- ldrh r1, [r0, 0x1C]
- movs r3, 0x2E
- ldrsh r0, [r2, r3]
- cmp r1, r0
- bne _080FC5A0
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _080FC5AE
- movs r0, 0
- strh r0, [r2, 0x30]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- lsrs r1, r2, 2
- movs r0, 0x1
- eors r1, r0
- ands r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _080FC5AE
- .align 2, 0
-_080FC59C: .4byte 0x02000000
-_080FC5A0:
- movs r0, 0x10
- strh r0, [r2, 0x30]
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x15
- ands r0, r1
- strb r0, [r2]
-_080FC5AE:
- pop {r0}
- bx r0
- thumb_func_end sub_80FC55C
-
- thumb_func_start sub_80FC5B4
-sub_80FC5B4: @ 80FC5B4
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _080FC5C8 @ =0x02000000
- ldrh r1, [r4, 0x4]
- cmp r1, 0
- beq _080FC5CC
- cmp r1, 0x1
- beq _080FC5E4
- b _080FC5F4
- .align 2, 0
-_080FC5C8: .4byte 0x02000000
-_080FC5CC:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- b _080FC5F4
-_080FC5E4:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080FC5F4
- ldr r0, _080FC5FC @ =sub_80FC600
- bl sub_80FC244
-_080FC5F4:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC5FC: .4byte sub_80FC600
- thumb_func_end sub_80FC5B4
-
- thumb_func_start sub_80FC600
-sub_80FC600: @ 80FC600
- push {r4,lr}
- ldr r0, _080FC620 @ =0x02000000
- ldrh r0, [r0, 0x4]
- cmp r0, 0
- bne _080FC68A
- bl sub_80FAB60
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bhi _080FC68A
- lsls r0, 2
- ldr r1, _080FC624 @ =_080FC628
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FC620: .4byte 0x02000000
-_080FC624: .4byte _080FC628
- .align 2, 0
-_080FC628:
- .4byte _080FC68A
- .4byte _080FC68A
- .4byte _080FC68A
- .4byte _080FC640
- .4byte _080FC646
- .4byte _080FC674
-_080FC640:
- bl sub_80FC254
- b _080FC68A
-_080FC646:
- ldr r4, _080FC668 @ =0x02000000
- ldrb r0, [r4, 0x1E]
- cmp r0, 0x2
- beq _080FC652
- cmp r0, 0x4
- bne _080FC68A
-_080FC652:
- movs r0, 0x5
- bl m4aSongNumStart
- ldr r1, _080FC66C @ =0x00000a6e
- adds r0, r4, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _080FC670 @ =sub_80FC69C
- bl sub_80FC244
- b _080FC68A
- .align 2, 0
-_080FC668: .4byte 0x02000000
-_080FC66C: .4byte 0x00000a6e
-_080FC670: .4byte sub_80FC69C
-_080FC674:
- movs r0, 0x5
- bl m4aSongNumStart
- ldr r0, _080FC690 @ =0x02000000
- ldr r1, _080FC694 @ =0x00000a6e
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080FC698 @ =sub_80FC69C
- bl sub_80FC244
-_080FC68A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC690: .4byte 0x02000000
-_080FC694: .4byte 0x00000a6e
-_080FC698: .4byte sub_80FC69C
- thumb_func_end sub_80FC600
-
- thumb_func_start sub_80FC69C
-sub_80FC69C: @ 80FC69C
- push {r4,lr}
- sub sp, 0x4
- ldr r4, _080FC6B0 @ =0x02000000
- ldrh r1, [r4, 0x4]
- cmp r1, 0
- beq _080FC6B4
- cmp r1, 0x1
- beq _080FC6CC
- b _080FC792
- .align 2, 0
-_080FC6B0: .4byte 0x02000000
-_080FC6B4:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- b _080FC792
-_080FC6CC:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _080FC792
- bl sub_80FAB10
- ldr r1, _080FC6F4 @ =0x00000a6e
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FC78C
- ldrh r0, [r4, 0x1C]
- cmp r0, 0xF
- beq _080FC724
- cmp r0, 0xF
- bgt _080FC6F8
- cmp r0, 0
- beq _080FC710
- b _080FC748
- .align 2, 0
-_080FC6F4: .4byte 0x00000a6e
-_080FC6F8:
- cmp r0, 0x3A
- beq _080FC708
- cmp r0, 0x49
- bne _080FC748
- movs r0, 0x16
- bl sub_8053538
- b _080FC786
-_080FC708:
- movs r0, 0x15
- bl sub_8053538
- b _080FC786
-_080FC710:
- ldr r0, _080FC720 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- movs r1, 0xD
- cmp r0, 0
- bne _080FC73A
- movs r1, 0xC
- b _080FC73A
- .align 2, 0
-_080FC720: .4byte gSaveBlock2
-_080FC724:
- ldr r0, _080FC744 @ =0x00000854
- bl FlagGet
- lsls r0, 24
- movs r1, 0xB
- cmp r0, 0
- beq _080FC73A
- ldrb r0, [r4, 0x1F]
- cmp r0, 0
- bne _080FC73A
- movs r1, 0x14
-_080FC73A:
- adds r0, r1, 0
- bl sub_8053538
- b _080FC786
- .align 2, 0
-_080FC744: .4byte 0x00000854
-_080FC748:
- ldr r3, _080FC764 @ =gUnknown_083E7920
- ldr r0, _080FC768 @ =0x02000000
- ldrh r1, [r0, 0x1C]
- lsls r0, r1, 1
- adds r2, r0, r1
- adds r0, r3, 0x2
- adds r1, r2, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _080FC76C
- bl sub_8053538
- b _080FC786
- .align 2, 0
-_080FC764: .4byte gUnknown_083E7920
-_080FC768: .4byte 0x02000000
-_080FC76C:
- adds r0, r2, r3
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- adds r1, r3, 0x1
- adds r1, r2, r1
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- movs r2, 0x1
- negs r2, r2
- bl warp1_set_2
-_080FC786:
- bl sub_80865BC
- b _080FC792
-_080FC78C:
- ldr r0, _080FC79C @ =sub_808AD58
- bl SetMainCallback2
-_080FC792:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC79C: .4byte sub_808AD58
- thumb_func_end sub_80FC69C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data-de/region_map_locations.inc b/data-de/region_map_locations.inc
deleted file mode 100644
index 1f4863206..000000000
--- a/data-de/region_map_locations.inc
+++ /dev/null
@@ -1,327 +0,0 @@
-gMapName_LittlerootTown: @ 83E6FF4
- .string "WURZELHEIM$"
-
-gMapName_OldaleTown: @ 83E7006
- .string "ROSALTSTADT$"
-
-gMapName_DewfordTown: @ 83E7014
- .string "FAUSTAUHAVEN$"
-
-gMapName_LavaridgeTown: @ 83E7023
- .string "BAD LAVASTADT$"
-
-gMapName_FallarborTown: @ 83E7034
- .string "LAUBWECHSEL{NAME_END}FELD$"
-
-gMapName_VerdanturfTown: @ 83E7045
- .string "WIESENFLUR$"
-
-gMapName_PacifidlogTown: @ 83E7057
- .string "FLOSSBRUNN$"
-
-gMapName_PetalburgCity: @ 83E7069
- .string "BLÜTENBURG{NAME_END} CITY$"
-
-gMapName_SlateportCity: @ 83E707A
- .string "GRAPHITPORT{NAME_END} CITY$"
-
-gMapName_MauvilleCity: @ 83E708B
- .string "MALVENFROH{NAME_END} CITY$"
-
-gMapName_RustboroCity: @ 83E709B
- .string "METAROST{NAME_END} CITY$"
-
-gMapName_FortreeCity: @ 83E70AB
- .string "BAUMHAUSEN{NAME_END} CITY$"
-
-gMapName_LilycoveCity: @ 83E70BA
- .string "SEEGRASULB{NAME_END} CITY$"
-
-gMapName_MossdeepCity: @ 83E70CA
- .string "MOOSBACH{NAME_END} CITY$"
-
-gMapName_SootopolisCity: @ 83E70DA
- .string "XENEROVILLE$"
-
-gMapName_EverGrandeCity: @ 83E70EC
- .string "PRACHTPOLIS{NAME_END} CITY$"
-
-gMapName_Route101: @ 83E70FF
- .string "ROUTE 101$"
-
-gMapName_Route102: @ 83E7109
- .string "ROUTE 102$"
-
-gMapName_Route103: @ 83E7113
- .string "ROUTE 103$"
-
-gMapName_Route104: @ 83E711D
- .string "ROUTE 104$"
-
-gMapName_Route105: @ 83E7127
- .string "ROUTE 105$"
-
-gMapName_Route106: @ 83E7131
- .string "ROUTE 106$"
-
-gMapName_Route107: @ 83E713B
- .string "ROUTE 107$"
-
-gMapName_Route108: @ 83E7145
- .string "ROUTE 108$"
-
-gMapName_Route109: @ 83E714F
- .string "ROUTE 109$"
-
-gMapName_Route110: @ 83E7159
- .string "ROUTE 110$"
-
-gMapName_Route111: @ 83E7163
- .string "ROUTE 111$"
-
-gMapName_Route112: @ 83E716D
- .string "ROUTE 112$"
-
-gMapName_Route113: @ 83E7177
- .string "ROUTE 113$"
-
-gMapName_Route114: @ 83E7181
- .string "ROUTE 114$"
-
-gMapName_Route115: @ 83E718B
- .string "ROUTE 115$"
-
-gMapName_Route116: @ 83E7195
- .string "ROUTE 116$"
-
-gMapName_Route117: @ 83E719F
- .string "ROUTE 117$"
-
-gMapName_Route118: @ 83E71A9
- .string "ROUTE 118$"
-
-gMapName_Route119: @ 83E71B3
- .string "ROUTE 119$"
-
-gMapName_Route120: @ 83E71BD
- .string "ROUTE 120$"
-
-gMapName_Route121: @ 83E71C7
- .string "ROUTE 121$"
-
-gMapName_Route122: @ 83E71D1
- .string "ROUTE 122$"
-
-gMapName_Route123: @ 83E71DB
- .string "ROUTE 123$"
-
-gMapName_Route124: @ 83E71E5
- .string "ROUTE 124$"
-
-gMapName_Route125: @ 83E71EF
- .string "ROUTE 125$"
-
-gMapName_Route126: @ 83E71F9
- .string "ROUTE 126$"
-
-gMapName_Route127: @ 83E7203
- .string "ROUTE 127$"
-
-gMapName_Route128: @ 83E720D
- .string "ROUTE 128$"
-
-gMapName_Route129: @ 83E7217
- .string "ROUTE 129$"
-
-gMapName_Route130: @ 83E7221
- .string "ROUTE 130$"
-
-gMapName_Route131: @ 83E722B
- .string "ROUTE 131$"
-
-gMapName_Route132: @ 83E7235
- .string "ROUTE 132$"
-
-gMapName_Route133: @ 83E723F
- .string "ROUTE 133$"
-
-gMapName_Route134: @ 83E7249
- .string "ROUTE 134$"
-
-gMapName_Underwater: @ 83E7253
- .string "UNTERWASSER$"
-
-gMapName_GraniteCave: @ 83E725E
- .string "GRANITHÖHLE$"
-
-gMapName_MtChimney: @ 83E726B
- .string "SCHLOTBERG$"
-
-gMapName_SafariZone: @ 83E7277
- .string "SAFARI-ZONE$"
-
-gMapName_BattleTower: @ 83E7283
- .string "DUELLTURM$"
-
-gMapName_PetalburgWoods: @ 83E7290
- .string "BLÜTENBURGWALD$"
-
-gMapName_RusturfTunnel: @ 83E72A0
- .string "METAFLURTUNNEL$"
-
-gMapName_AbandonedShip: @ 83E72AF
- .string "SCHIFFSWRACK$"
-
-gMapName_NewMauville: @ 83E72BE
- .string "NEU MALVENFROH$"
-
-gMapName_MeteorFalls: @ 83E72CB
- .string "METEORFÄLLE$"
-
-gMapName_MtPyre: @ 83E72D8
- .string "PYROBERG$"
-
-gMapName_EvilTeamHideout: @ 83E72E1
- .string "{EVIL_TEAM}s VERSTECK$"
-
-gMapName_ShoalCave: @ 83E72EC
- .string "KÜSTENHÖHLE$"
-
-gMapName_SeafloorCavern: @ 83E72F7
- .string "TIEFSEEHÖHLE$"
-
-gMapName_VictoryRoad: @ 83E7307
- .string "SIEGESSTRASSE$"
-
-gMapName_MirageIsland: @ 83E7314
- .string "WUNDEREILAND$"
-
-gMapName_CaveOfOrigin: @ 83E7322
- .string "URZEITHÖHLE$"
-
-gMapName_SouthernIsland: @ 83E7331
- .string "INSEL IM SÜDEN$"
-
-gMapName_FieryPath: @ 83E7341
- .string "FEURIGER PFAD$"
-
-gMapName_JaggedPass: @ 83E734C
- .string "STEILPASS$"
-
-gMapName_SealedChamber: @ 83E7358
- .string "SIEGELKAMMER$"
-
-gMapName_ScorchedSlab: @ 83E7367
- .string "SONNENGROTTE$"
-
-gMapName_IslandCave: @ 83E7375
- .string "INSELHÖHLE$"
-
-gMapName_DesertRuins: @ 83E7381
- .string "WÜSTENRUINE$"
-
-gMapName_AncientTomb: @ 83E738E
- .string "GRABMAL$"
-
-gMapName_InsideOfTruck: @ 83E739B
- .string "IM MÖBELWAGEN$"
-
-gMapName_SkyPillar: @ 83E73AB
- .string "HIMMELTURM$"
-
-gMapName_SecretBase: @ 83E73B6
- .string "GEHEIMBASIS$"
-
-gMapName_None: @ 83E73C2
- .string "$"
-
- .align 2
-gRegionMapLocations:: @ 83E73C4
- region_map_location 4, 11, 1, 1, LittlerootTown
- region_map_location 4, 9, 1, 1, OldaleTown
- region_map_location 2, 14, 1, 1, DewfordTown
- region_map_location 5, 3, 1, 1, LavaridgeTown
- region_map_location 3, 0, 1, 1, FallarborTown
- region_map_location 4, 6, 1, 1, VerdanturfTown
- region_map_location 17, 10, 1, 1, PacifidlogTown
- region_map_location 1, 9, 1, 1, PetalburgCity
- region_map_location 8, 10, 1, 2, SlateportCity
- region_map_location 8, 6, 2, 1, MauvilleCity
- region_map_location 0, 5, 1, 2, RustboroCity
- region_map_location 12, 0, 1, 1, FortreeCity
- region_map_location 18, 3, 2, 1, LilycoveCity
- region_map_location 24, 5, 2, 1, MossdeepCity
- region_map_location 21, 7, 1, 1, SootopolisCity
- region_map_location 27, 8, 1, 2, EverGrandeCity
- region_map_location 4, 10, 1, 1, Route101
- region_map_location 2, 9, 2, 1, Route102
- region_map_location 4, 8, 4, 1, Route103
- region_map_location 0, 7, 1, 3, Route104
- region_map_location 0, 10, 1, 3, Route105
- region_map_location 0, 13, 2, 1, Route106
- region_map_location 3, 14, 3, 1, Route107
- region_map_location 6, 14, 2, 1, Route108
- region_map_location 8, 12, 1, 3, Route109
- region_map_location 8, 7, 1, 3, Route110
- region_map_location 8, 0, 1, 6, Route111
- region_map_location 6, 3, 2, 1, Route112
- region_map_location 4, 0, 4, 1, Route113
- region_map_location 1, 0, 2, 3, Route114
- region_map_location 0, 2, 1, 3, Route115
- region_map_location 1, 5, 4, 1, Route116
- region_map_location 5, 6, 3, 1, Route117
- region_map_location 10, 6, 2, 1, Route118
- region_map_location 11, 0, 1, 6, Route119
- region_map_location 13, 0, 1, 4, Route120
- region_map_location 14, 3, 4, 1, Route121
- region_map_location 16, 4, 1, 2, Route122
- region_map_location 12, 6, 5, 1, Route123
- region_map_location 20, 3, 4, 3, Route124
- region_map_location 24, 3, 2, 2, Route125
- region_map_location 20, 6, 3, 3, Route126
- region_map_location 23, 6, 3, 3, Route127
- region_map_location 23, 9, 4, 1, Route128
- region_map_location 24, 10, 2, 1, Route129
- region_map_location 21, 10, 3, 1, Route130
- region_map_location 18, 10, 3, 1, Route131
- region_map_location 15, 10, 2, 1, Route132
- region_map_location 12, 10, 3, 1, Route133
- region_map_location 9, 10, 3, 1, Route134
- region_map_location 20, 3, 4, 3, Underwater
- region_map_location 20, 6, 3, 3, Underwater
- region_map_location 23, 6, 3, 3, Underwater
- region_map_location 23, 9, 4, 1, Underwater
- region_map_location 21, 7, 1, 1, Underwater
- region_map_location 1, 13, 1, 1, GraniteCave
- region_map_location 6, 2, 1, 1, MtChimney
- region_map_location 16, 2, 1, 1, SafariZone
- region_map_location 22, 12, 1, 1, BattleTower
- region_map_location 0, 8, 1, 1, PetalburgWoods
- region_map_location 2, 5, 1, 1, RusturfTunnel
- region_map_location 6, 14, 1, 1, AbandonedShip
- region_map_location 8, 7, 1, 1, NewMauville
- region_map_location 0, 3, 1, 1, MeteorFalls
- region_map_location 1, 2, 1, 1, MeteorFalls
- region_map_location 16, 4, 1, 1, MtPyre
- region_map_location 19, 3, 1, 1, EvilTeamHideout
- region_map_location 24, 4, 1, 1, ShoalCave
- region_map_location 24, 9, 1, 1, SeafloorCavern
- region_map_location 24, 9, 1, 1, Underwater
- region_map_location 27, 9, 1, 1, VictoryRoad
- region_map_location 17, 10, 1, 1, MirageIsland
- region_map_location 21, 7, 1, 1, CaveOfOrigin
- region_map_location 12, 14, 1, 1, SouthernIsland
- region_map_location 6, 3, 1, 1, FieryPath
- region_map_location 7, 3, 1, 1, FieryPath
- region_map_location 6, 3, 1, 1, JaggedPass
- region_map_location 7, 2, 1, 1, JaggedPass
- region_map_location 11, 10, 1, 1, SealedChamber
- region_map_location 11, 10, 1, 1, Underwater
- region_map_location 13, 0, 1, 1, ScorchedSlab
- region_map_location 0, 10, 1, 1, IslandCave
- region_map_location 8, 3, 1, 1, DesertRuins
- region_map_location 13, 2, 1, 1, AncientTomb
- region_map_location 0, 0, 1, 1, InsideOfTruck
- region_map_location 19, 10, 1, 1, SkyPillar
- region_map_location 0, 0, 1, 1, SecretBase
- region_map_location 0, 0, 1, 1, None
diff --git a/data/region_map.s b/data/region_map.s
deleted file mode 100644
index d4d13f194..000000000
--- a/data/region_map.s
+++ /dev/null
@@ -1,259 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gPokenavCursor_Pal::
- .incbin "graphics/pokenav/cursor.gbapal"
-
- .align 2
-gUnknown_083E5AF0:: @ 83E5AF0
- .incbin "graphics/pokenav/cursor_small.4bpp.lz"
-
- .align 2
-gUnknown_083E5B34:: @ 83E5B34
- .incbin "graphics/pokenav/cursor_large.4bpp.lz"
-
- .align 2
-gRegionMapBrendanIconPalette:: @ 83E5C20
- .incbin "graphics/pokenav/brendan_icon.gbapal"
-
- .align 2
-gRegionMapBrendanIconTiles:: @ 83E5C40
- .incbin "graphics/pokenav/brendan_icon.4bpp"
-
- .align 2
-gRegionMapMayIconPalette:: @ 83E5CC0
- .incbin "graphics/pokenav/may_icon.gbapal"
-
- .align 2
-gRegionMapMayIconTiles:: @ 83E5CE0
- .incbin "graphics/pokenav/may_icon.4bpp"
-
- .align 2
-gUnknown_083E5D60:: @ 83E5D60
- .incbin "graphics/pokenav/region_map.gbapal", 0xE0, 0x40
-
- .align 2
-gUnknown_083E5DA0:: @ 83E5DA0
- .incbin "graphics/pokenav/region_map.8bpp.lz"
-
- .align 2
-gUnknown_083E6B04:: @ 83E6B04
- .incbin "graphics/pokenav/region_map_map.bin.lz"
-
-@ 83E6E50
- .include "data/region_map_sections.inc"
-
-@ 83E6FF4
- .include "data/region_map_locations.inc"
-
-gUnknown_083E7684:: @ 83E7684
- .2byte 50, 39
- .2byte 51, 41
- .2byte 52, 42
- .2byte 53, 43
- .2byte 54, 14
- .2byte 69, 43
- .2byte 66, 12
- .2byte 79, 49
- .2byte 59, 19
- .2byte 76, 27
- .2byte 65, 37
- .2byte 85, 46
- .2byte 88, 88
-
- .align 2
-gOamData_83E76B8:: @ 83E76B8
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_83E76C0:: @ 83E76C0
- obj_image_anim_frame 0, 20
- obj_image_anim_frame 4, 20
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnim_83E76CC:: @ 83E76CC
- obj_image_anim_frame 0, 10
- obj_image_anim_frame 16, 10
- obj_image_anim_frame 32, 10
- obj_image_anim_frame 16, 10
- obj_image_anim_jump 0
-
- .align 2
-gSpriteAnimTable_83E76E0:: @ 83E76E0
- .4byte gSpriteAnim_83E76C0
- .4byte gSpriteAnim_83E76CC
-
- .align 2
-gUnknown_083E76E8:: @ 83E76E8
- obj_pal gPokenavCursor_Pal, 0x0000
-
- .align 2
-gSpriteTemplate_83E76F0:: @ 83E76F0
- spr_template 0, 0, gOamData_83E76B8, gSpriteAnimTable_83E76E0, NULL, gDummySpriteAffineAnimTable, sub_80FBAF0
-
- .align 2
-gOamData_083E7708:: @ 83E7708
- .2byte 0x0000
- .2byte 0x4000
- .2byte 0x0800
-
- .align 2
-gSpriteAnim_83E7710: @ 83E7710
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
-gSpriteAnimTable_083E7718:: @ 83E7718 ANIMCMD
- .4byte gSpriteAnim_83E7710
-
-gUnknown_083E771C:: @ 83E771C
- .incbin "graphics/pokenav/map_frame.gbapal"
-
-gUnknown_083E773C:: @ 83E773C
- .incbin "graphics/pokenav/map_frame.4bpp.lz"
-
-gUnknown_083E7774:: @ 83E7774
- .incbin "graphics/pokenav/map_frame.bin.lz"
-
- .align 2
-gPokenavMapMisc_Pal::
- .incbin "graphics/pokenav/map_misc.gbapal"
-
-gUnknown_083E784C:: @ 83E784C
- .incbin "graphics/pokenav/map_misc.4bpp.lz"
-
-gUnknown_083E7920:: @ 83E7920
- .byte 0, 9, 1
- .byte 0, 10, 14
- .byte 0, 11, 15
- .byte 0, 12, 16
- .byte 0, 13, 17
- .byte 0, 14, 18
- .byte 0, 15, 19
- .byte 0, 0, 3
- .byte 0, 1, 4
- .byte 0, 2, 5
- .byte 0, 3, 6
- .byte 0, 4, 7
- .byte 0, 5, 8
- .byte 0, 6, 9
- .byte 0, 7, 10
- .byte 0, 8, 11
- .byte 0, 16, 0
- .byte 0, 17, 0
- .byte 0, 18, 0
- .byte 0, 19, 0
- .byte 0, 20, 0
- .byte 0, 21, 0
- .byte 0, 22, 0
- .byte 0, 23, 0
- .byte 0, 24, 0
- .byte 0, 25, 0
- .byte 0, 26, 0
- .byte 0, 27, 0
- .byte 0, 28, 0
- .byte 0, 29, 0
- .byte 0, 30, 0
- .byte 0, 31, 0
- .byte 0, 32, 0
- .byte 0, 33, 0
- .byte 0, 34, 0
- .byte 0, 35, 0
- .byte 0, 36, 0
- .byte 0, 37, 0
- .byte 0, 38, 0
- .byte 0, 39, 0
- .byte 0, 40, 0
- .byte 0, 41, 0
- .byte 0, 42, 0
- .byte 0, 43, 0
- .byte 0, 44, 0
- .byte 0, 45, 0
- .byte 0, 46, 0
- .byte 0, 47, 0
- .byte 0, 48, 0
- .byte 0, 49, 0
-
- .align 2
-Unknown_3E79B8: @ 83E79B8
- .4byte OtherText_PokeLeague
- .4byte OtherText_PokeCenter
-
- .align 2
-gUnknown_083E79C0:: @ 83E79C0
- .4byte Unknown_3E79B8
- .2byte 0xF
- .2byte 0x854
-
-@ XXX: what is this?
- .align 2
- .4byte 0x2000000
-
- .align 2
-gUnknown_083E79CC:: @ 83E79CC
- obj_pal gPokenavMapMisc_Pal, 0x0002
-
- .align 2
-gUnknown_083E79D4:: @ 83E79D4
- .2byte 2120, 58
- .2byte 65535, 88
-
- .align 2
-gOamData_83E79DC:: @ 83E79DC
- .2byte 0x0000
- .2byte 0x0000
- .2byte 0x0800
-
- .align 2
-gSpriteAnim_83E79E4:: @ 83E79E4
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E79EC:: @ 83E79EC
- obj_image_anim_frame 1, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E79F4:: @ 83E79F4
- obj_image_anim_frame 3, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E79FC:: @ 83E79FC
- obj_image_anim_frame 5, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E7A04:: @ 83E7A04
- obj_image_anim_frame 6, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E7A0C:: @ 83E7A0C
- obj_image_anim_frame 8, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnim_83E7A14:: @ 83E7A14
- obj_image_anim_frame 10, 5
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83E7A1C:: @ 83E7A1C
- .4byte gSpriteAnim_83E79E4
- .4byte gSpriteAnim_83E79EC
- .4byte gSpriteAnim_83E79F4
- .4byte gSpriteAnim_83E79FC
- .4byte gSpriteAnim_83E7A04
- .4byte gSpriteAnim_83E7A0C
- .4byte gSpriteAnim_83E7A14
-
- .align 2
-gSpriteTemplate_83E7A38:: @ 83E7A38
- spr_template 2, 2, gOamData_83E79DC, gSpriteAnimTable_83E7A1C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
diff --git a/data/region_map_locations.inc b/data/region_map_locations.inc
deleted file mode 100644
index 389b5aa0c..000000000
--- a/data/region_map_locations.inc
+++ /dev/null
@@ -1,327 +0,0 @@
-gMapName_LittlerootTown: @ 83E6FF4
- .string "LITTLEROOT{NAME_END} TOWN$"
-
-gMapName_OldaleTown: @ 83E7006
- .string "OLDALE{NAME_END} TOWN$"
-
-gMapName_DewfordTown: @ 83E7014
- .string "DEWFORD{NAME_END} TOWN$"
-
-gMapName_LavaridgeTown: @ 83E7023
- .string "LAVARIDGE{NAME_END} TOWN$"
-
-gMapName_FallarborTown: @ 83E7034
- .string "FALLARBOR{NAME_END} TOWN$"
-
-gMapName_VerdanturfTown: @ 83E7045
- .string "VERDANTURF{NAME_END} TOWN$"
-
-gMapName_PacifidlogTown: @ 83E7057
- .string "PACIFIDLOG{NAME_END} TOWN$"
-
-gMapName_PetalburgCity: @ 83E7069
- .string "PETALBURG{NAME_END} CITY$"
-
-gMapName_SlateportCity: @ 83E707A
- .string "SLATEPORT{NAME_END} CITY$"
-
-gMapName_MauvilleCity: @ 83E708B
- .string "MAUVILLE{NAME_END} CITY$"
-
-gMapName_RustboroCity: @ 83E709B
- .string "RUSTBORO{NAME_END} CITY$"
-
-gMapName_FortreeCity: @ 83E70AB
- .string "FORTREE{NAME_END} CITY$"
-
-gMapName_LilycoveCity: @ 83E70BA
- .string "LILYCOVE{NAME_END} CITY$"
-
-gMapName_MossdeepCity: @ 83E70CA
- .string "MOSSDEEP{NAME_END} CITY$"
-
-gMapName_SootopolisCity: @ 83E70DA
- .string "SOOTOPOLIS{NAME_END} CITY$"
-
-gMapName_EverGrandeCity: @ 83E70EC
- .string "EVER GRANDE{NAME_END} CITY$"
-
-gMapName_Route101: @ 83E70FF
- .string "ROUTE 101$"
-
-gMapName_Route102: @ 83E7109
- .string "ROUTE 102$"
-
-gMapName_Route103: @ 83E7113
- .string "ROUTE 103$"
-
-gMapName_Route104: @ 83E711D
- .string "ROUTE 104$"
-
-gMapName_Route105: @ 83E7127
- .string "ROUTE 105$"
-
-gMapName_Route106: @ 83E7131
- .string "ROUTE 106$"
-
-gMapName_Route107: @ 83E713B
- .string "ROUTE 107$"
-
-gMapName_Route108: @ 83E7145
- .string "ROUTE 108$"
-
-gMapName_Route109: @ 83E714F
- .string "ROUTE 109$"
-
-gMapName_Route110: @ 83E7159
- .string "ROUTE 110$"
-
-gMapName_Route111: @ 83E7163
- .string "ROUTE 111$"
-
-gMapName_Route112: @ 83E716D
- .string "ROUTE 112$"
-
-gMapName_Route113: @ 83E7177
- .string "ROUTE 113$"
-
-gMapName_Route114: @ 83E7181
- .string "ROUTE 114$"
-
-gMapName_Route115: @ 83E718B
- .string "ROUTE 115$"
-
-gMapName_Route116: @ 83E7195
- .string "ROUTE 116$"
-
-gMapName_Route117: @ 83E719F
- .string "ROUTE 117$"
-
-gMapName_Route118: @ 83E71A9
- .string "ROUTE 118$"
-
-gMapName_Route119: @ 83E71B3
- .string "ROUTE 119$"
-
-gMapName_Route120: @ 83E71BD
- .string "ROUTE 120$"
-
-gMapName_Route121: @ 83E71C7
- .string "ROUTE 121$"
-
-gMapName_Route122: @ 83E71D1
- .string "ROUTE 122$"
-
-gMapName_Route123: @ 83E71DB
- .string "ROUTE 123$"
-
-gMapName_Route124: @ 83E71E5
- .string "ROUTE 124$"
-
-gMapName_Route125: @ 83E71EF
- .string "ROUTE 125$"
-
-gMapName_Route126: @ 83E71F9
- .string "ROUTE 126$"
-
-gMapName_Route127: @ 83E7203
- .string "ROUTE 127$"
-
-gMapName_Route128: @ 83E720D
- .string "ROUTE 128$"
-
-gMapName_Route129: @ 83E7217
- .string "ROUTE 129$"
-
-gMapName_Route130: @ 83E7221
- .string "ROUTE 130$"
-
-gMapName_Route131: @ 83E722B
- .string "ROUTE 131$"
-
-gMapName_Route132: @ 83E7235
- .string "ROUTE 132$"
-
-gMapName_Route133: @ 83E723F
- .string "ROUTE 133$"
-
-gMapName_Route134: @ 83E7249
- .string "ROUTE 134$"
-
-gMapName_Underwater: @ 83E7253
- .string "UNDERWATER$"
-
-gMapName_GraniteCave: @ 83E725E
- .string "GRANITE CAVE$"
-
-gMapName_MtChimney: @ 83E726B
- .string "MT. CHIMNEY$"
-
-gMapName_SafariZone: @ 83E7277
- .string "SAFARI ZONE$"
-
-gMapName_BattleTower: @ 83E7283
- .string "BATTLE TOWER$"
-
-gMapName_PetalburgWoods: @ 83E7290
- .string "PETALBURG WOODS$"
-
-gMapName_RusturfTunnel: @ 83E72A0
- .string "RUSTURF TUNNEL$"
-
-gMapName_AbandonedShip: @ 83E72AF
- .string "ABANDONED SHIP$"
-
-gMapName_NewMauville: @ 83E72BE
- .string "NEW MAUVILLE$"
-
-gMapName_MeteorFalls: @ 83E72CB
- .string "METEOR FALLS$"
-
-gMapName_MtPyre: @ 83E72D8
- .string "MT. PYRE$"
-
-gMapName_EvilTeamHideout: @ 83E72E1
- .string "{EVIL_TEAM} HIDEOUT$"
-
-gMapName_ShoalCave: @ 83E72EC
- .string "SHOAL CAVE$"
-
-gMapName_SeafloorCavern: @ 83E72F7
- .string "SEAFLOOR CAVERN$"
-
-gMapName_VictoryRoad: @ 83E7307
- .string "VICTORY ROAD$"
-
-gMapName_MirageIsland: @ 83E7314
- .string "MIRAGE ISLAND$"
-
-gMapName_CaveOfOrigin: @ 83E7322
- .string "CAVE OF ORIGIN$"
-
-gMapName_SouthernIsland: @ 83E7331
- .string "SOUTHERN ISLAND$"
-
-gMapName_FieryPath: @ 83E7341
- .string "FIERY PATH$"
-
-gMapName_JaggedPass: @ 83E734C
- .string "JAGGED PASS$"
-
-gMapName_SealedChamber: @ 83E7358
- .string "SEALED CHAMBER$"
-
-gMapName_ScorchedSlab: @ 83E7367
- .string "SCORCHED SLAB$"
-
-gMapName_IslandCave: @ 83E7375
- .string "ISLAND CAVE$"
-
-gMapName_DesertRuins: @ 83E7381
- .string "DESERT RUINS$"
-
-gMapName_AncientTomb: @ 83E738E
- .string "ANCIENT TOMB$"
-
-gMapName_InsideOfTruck: @ 83E739B
- .string "INSIDE OF TRUCK$"
-
-gMapName_SkyPillar: @ 83E73AB
- .string "SKY PILLAR$"
-
-gMapName_SecretBase: @ 83E73B6
- .string "SECRET BASE$"
-
-gMapName_None: @ 83E73C2
- .string "$"
-
- .align 2
-gRegionMapLocations:: @ 83E73C4
- region_map_location 4, 11, 1, 1, LittlerootTown
- region_map_location 4, 9, 1, 1, OldaleTown
- region_map_location 2, 14, 1, 1, DewfordTown
- region_map_location 5, 3, 1, 1, LavaridgeTown
- region_map_location 3, 0, 1, 1, FallarborTown
- region_map_location 4, 6, 1, 1, VerdanturfTown
- region_map_location 17, 10, 1, 1, PacifidlogTown
- region_map_location 1, 9, 1, 1, PetalburgCity
- region_map_location 8, 10, 1, 2, SlateportCity
- region_map_location 8, 6, 2, 1, MauvilleCity
- region_map_location 0, 5, 1, 2, RustboroCity
- region_map_location 12, 0, 1, 1, FortreeCity
- region_map_location 18, 3, 2, 1, LilycoveCity
- region_map_location 24, 5, 2, 1, MossdeepCity
- region_map_location 21, 7, 1, 1, SootopolisCity
- region_map_location 27, 8, 1, 2, EverGrandeCity
- region_map_location 4, 10, 1, 1, Route101
- region_map_location 2, 9, 2, 1, Route102
- region_map_location 4, 8, 4, 1, Route103
- region_map_location 0, 7, 1, 3, Route104
- region_map_location 0, 10, 1, 3, Route105
- region_map_location 0, 13, 2, 1, Route106
- region_map_location 3, 14, 3, 1, Route107
- region_map_location 6, 14, 2, 1, Route108
- region_map_location 8, 12, 1, 3, Route109
- region_map_location 8, 7, 1, 3, Route110
- region_map_location 8, 0, 1, 6, Route111
- region_map_location 6, 3, 2, 1, Route112
- region_map_location 4, 0, 4, 1, Route113
- region_map_location 1, 0, 2, 3, Route114
- region_map_location 0, 2, 1, 3, Route115
- region_map_location 1, 5, 4, 1, Route116
- region_map_location 5, 6, 3, 1, Route117
- region_map_location 10, 6, 2, 1, Route118
- region_map_location 11, 0, 1, 6, Route119
- region_map_location 13, 0, 1, 4, Route120
- region_map_location 14, 3, 4, 1, Route121
- region_map_location 16, 4, 1, 2, Route122
- region_map_location 12, 6, 5, 1, Route123
- region_map_location 20, 3, 4, 3, Route124
- region_map_location 24, 3, 2, 2, Route125
- region_map_location 20, 6, 3, 3, Route126
- region_map_location 23, 6, 3, 3, Route127
- region_map_location 23, 9, 4, 1, Route128
- region_map_location 24, 10, 2, 1, Route129
- region_map_location 21, 10, 3, 1, Route130
- region_map_location 18, 10, 3, 1, Route131
- region_map_location 15, 10, 2, 1, Route132
- region_map_location 12, 10, 3, 1, Route133
- region_map_location 9, 10, 3, 1, Route134
- region_map_location 20, 3, 4, 3, Underwater
- region_map_location 20, 6, 3, 3, Underwater
- region_map_location 23, 6, 3, 3, Underwater
- region_map_location 23, 9, 4, 1, Underwater
- region_map_location 21, 7, 1, 1, Underwater
- region_map_location 1, 13, 1, 1, GraniteCave
- region_map_location 6, 2, 1, 1, MtChimney
- region_map_location 16, 2, 1, 1, SafariZone
- region_map_location 22, 12, 1, 1, BattleTower
- region_map_location 0, 8, 1, 1, PetalburgWoods
- region_map_location 2, 5, 1, 1, RusturfTunnel
- region_map_location 6, 14, 1, 1, AbandonedShip
- region_map_location 8, 7, 1, 1, NewMauville
- region_map_location 0, 3, 1, 1, MeteorFalls
- region_map_location 1, 2, 1, 1, MeteorFalls
- region_map_location 16, 4, 1, 1, MtPyre
- region_map_location 19, 3, 1, 1, EvilTeamHideout
- region_map_location 24, 4, 1, 1, ShoalCave
- region_map_location 24, 9, 1, 1, SeafloorCavern
- region_map_location 24, 9, 1, 1, Underwater
- region_map_location 27, 9, 1, 1, VictoryRoad
- region_map_location 17, 10, 1, 1, MirageIsland
- region_map_location 21, 7, 1, 1, CaveOfOrigin
- region_map_location 12, 14, 1, 1, SouthernIsland
- region_map_location 6, 3, 1, 1, FieryPath
- region_map_location 7, 3, 1, 1, FieryPath
- region_map_location 6, 3, 1, 1, JaggedPass
- region_map_location 7, 2, 1, 1, JaggedPass
- region_map_location 11, 10, 1, 1, SealedChamber
- region_map_location 11, 10, 1, 1, Underwater
- region_map_location 13, 0, 1, 1, ScorchedSlab
- region_map_location 0, 10, 1, 1, IslandCave
- region_map_location 8, 3, 1, 1, DesertRuins
- region_map_location 13, 2, 1, 1, AncientTomb
- region_map_location 0, 0, 1, 1, InsideOfTruck
- region_map_location 19, 10, 1, 1, SkyPillar
- region_map_location 0, 0, 1, 1, SecretBase
- region_map_location 0, 0, 1, 1, None
diff --git a/data/region_map_sections.inc b/data/region_map_sections.inc
deleted file mode 100644
index 6336eac0e..000000000
--- a/data/region_map_sections.inc
+++ /dev/null
@@ -1,16 +0,0 @@
-gRegionMapSections:: @ 83E6E50
- .byte 0x58,0x1D,0x1D,0x04,0x1C,0x1C,0x1C,0x1C,0x1A,0x58,0x58,0x22,0x0B,0x23,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
- .byte 0x58,0x1D,0x58,0x58,0x58,0x58,0x38,0x38,0x1A,0x58,0x58,0x22,0x58,0x23,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
- .byte 0x1E,0x1D,0x58,0x58,0x58,0x58,0x38,0x38,0x1A,0x58,0x58,0x22,0x58,0x23,0x58,0x58,0x39,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
- .byte 0x1E,0x58,0x58,0x58,0x58,0x03,0x1B,0x1B,0x1A,0x58,0x58,0x22,0x58,0x23,0x24,0x24,0x24,0x24,0x0C,0x0C,0x27,0x27,0x27,0x27,0x28,0x28,0x58,0x58
- .byte 0x1E,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x1A,0x58,0x58,0x22,0x58,0x58,0x58,0x58,0x25,0x58,0x58,0x58,0x27,0x27,0x27,0x27,0x28,0x28,0x58,0x58
- .byte 0x0A,0x1F,0x1F,0x1F,0x1F,0x58,0x58,0x58,0x1A,0x58,0x58,0x22,0x58,0x58,0x58,0x58,0x25,0x58,0x58,0x58,0x27,0x27,0x27,0x27,0x0D,0x0D,0x58,0x58
- .byte 0x0A,0x58,0x58,0x58,0x05,0x20,0x20,0x20,0x09,0x09,0x21,0x21,0x26,0x26,0x26,0x26,0x26,0x58,0x58,0x58,0x29,0x29,0x29,0x2A,0x2A,0x2A,0x58,0x58
- .byte 0x13,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x29,0x0E,0x29,0x2A,0x2A,0x2A,0x58,0x58
- .byte 0x13,0x58,0x58,0x58,0x12,0x12,0x12,0x12,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x29,0x29,0x29,0x2A,0x2A,0x2A,0x58,0x0F
- .byte 0x13,0x07,0x11,0x11,0x01,0x58,0x58,0x58,0x19,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x2B,0x2B,0x2B,0x2B,0x0F
- .byte 0x14,0x58,0x58,0x58,0x10,0x58,0x58,0x58,0x08,0x31,0x31,0x31,0x30,0x30,0x30,0x2F,0x2F,0x06,0x2E,0x2E,0x2E,0x2D,0x2D,0x2D,0x2C,0x2C,0x58,0x58
- .byte 0x14,0x58,0x58,0x58,0x00,0x58,0x58,0x58,0x08,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
- .byte 0x14,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x18,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x3A,0x58,0x58,0x58,0x58,0x58
- .byte 0x15,0x15,0x15,0x58,0x58,0x58,0x58,0x58,0x18,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
- .byte 0x58,0x58,0x02,0x16,0x16,0x16,0x17,0x17,0x18,0x58,0x58,0x58,0x49,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
diff --git a/graphics/pokenav/map_misc.pal b/graphics/pokenav/fly_target_icons.pal
index c0f2cc4e9..c0f2cc4e9 100644
--- a/graphics/pokenav/map_misc.pal
+++ b/graphics/pokenav/fly_target_icons.pal
diff --git a/graphics/pokenav/map_misc.png b/graphics/pokenav/fly_target_icons.png
index 7a997afc5..7a997afc5 100644
--- a/graphics/pokenav/map_misc.png
+++ b/graphics/pokenav/fly_target_icons.png
Binary files differ
diff --git a/graphics/pokenav/region_map.pal b/graphics/pokenav/region_map.pal
index 4fca67ade..78ffc009a 100644
--- a/graphics/pokenav/region_map.pal
+++ b/graphics/pokenav/region_map.pal
@@ -1,118 +1,6 @@
JASC-PAL
0100
-256
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
+32
0 0 0
156 213 255
164 180 255
@@ -145,115 +33,3 @@ JASC-PAL
0 0 0
0 0 0
0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
diff --git a/include/field_effect.h b/include/field_effect.h
index cd84652b1..5edca21dc 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -109,6 +109,8 @@ void SpriteCB_PokeballGlow(struct Sprite *);
void SpriteCB_PokecenterMonitor(struct Sprite *);
void SpriteCB_HallOfFameMonitor(struct Sprite *);
+void sub_80865BC(void);
+
void PokecenterHealEffect_0(struct Task *);
void PokecenterHealEffect_1(struct Task *);
void PokecenterHealEffect_2(struct Task *);
diff --git a/include/flags.h b/include/flags.h
index 26a129ea2..a60de6ea0 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -22,6 +22,24 @@
#define BADGE07_GET 0x80D
#define BADGE08_GET 0x80E
+// cities and towns
+#define FLAG_VISITED_LITTLEROOT_TOWN 0x80F
+#define FLAG_VISITED_OLDALE_TOWN 0x810
+#define FLAG_VISITED_DEWFORD_TOWN 0x811
+#define FLAG_VISITED_LAVARIDGE_TOWN 0x812
+#define FLAG_VISITED_FALLARBOR_TOWN 0x813
+#define FLAG_VISITED_VERDANTURF_TOWN 0x814
+#define FLAG_VISITED_PACIFIDLOG_TOWN 0x815
+#define FLAG_VISITED_PETALBURG_CITY 0x816
+#define FLAG_VISITED_SLATEPORT_CITY 0x817
+#define FLAG_VISITED_MAUVILLE_CITY 0x818
+#define FLAG_VISITED_RUSTBORO_CITY 0x819
+#define FLAG_VISITED_FORTREE_CITY 0x81A
+#define FLAG_VISITED_LILYCOVE_CITY 0x81B
+#define FLAG_VISITED_MOSSDEEP_CITY 0x81C
+#define FLAG_VISITED_SOOTOPOLIS_CITY 0x81D
+#define FLAG_VISITED_EVER_GRANDE_CITY 0x81E
+
#define SYS_USE_FLASH 0x828
#define SYS_USE_STRENGTH 0x829
#define SYS_WEATHER_CTRL 0x82A
@@ -42,6 +60,9 @@
#define SYS_SHOAL_TIDE 0x83A
#define SYS_RIBBON_GET 0x83B
+#define FLAG_UNLOCK_BATTLE_TOWER 0x848
+#define FLAG_UNLOCK_SOUTHERN_ISLAND 0x849
+
#define SYS_PC_LANETTE 0x84B
#define SYS_EXDATA_ENABLE 0x84C
#define SYS_ENC_UP_ITEM 0x84D
@@ -52,6 +73,8 @@
#define SYS_BRAILLE_FLY 0x852
#define SYS_HAS_EON_TICKET 0x853
+#define SYS_POKEMON_LEAGUE_FLY 0x854
+
#define SYS_TV_LATI 0x85D
#define SYS_SHOAL_ITEM 0x85F
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 7589de029..4029132e8 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -166,7 +166,7 @@ struct MapHeader
/* 0x0C */ struct MapConnections *connections;
/* 0x10 */ u16 music;
/* 0x12 */ u16 mapDataId;
- /* 0x14 */ u8 name;
+ /* 0x14 */ u8 regionMapSectionId;
/* 0x15 */ u8 cave;
/* 0x16 */ u8 weather;
/* 0x17 */ u8 mapType;
diff --git a/include/menu.h b/include/menu.h
index 9b48ab79b..25b1487d7 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -67,7 +67,7 @@ u8 MenuPrint_PixelCoords(const u8 *, u8, u16, u8);
u8 sub_8072A18(const u8 *, u8, u16, u8, u32);
u8 unref_sub_8072A5C(u8 *, u8 *, u8, u16, u8, u32);
int sub_8072AB0(const u8 *, u8, u16, u8, u8, u32);
-void MenuPrint_RightAligned(u8 *, u8, u8);
+void MenuPrint_RightAligned(const u8 *, u8, u8);
void sub_8072B80(const u8 *, u8, u8, const u8 *);
void sub_8072BD8(const u8 *, u8, u8, u16);
u8 *sub_8072C14(u8 *, s32, u8, u8);
diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h
index d22dbb708..fc43a44c6 100644
--- a/include/pokemon_menu.h
+++ b/include/pokemon_menu.h
@@ -6,6 +6,7 @@ void sub_808A004();
void sub_808AB90(void);
void sub_808AB90(void); // unknown args
void sub_808AB90(void);
+void sub_808AD58(void);
void sub_808B020(void);
void sub_808B0C0(u8);
void sub_808B508(u8);
diff --git a/include/region_map.h b/include/region_map.h
index 6dfa4dcf0..3d970fa0a 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -1,13 +1,72 @@
#ifndef GUARD_REGION_MAP_H
#define GUARD_REGION_MAP_H
-void sub_80FA8EC(u32, u8);
-void sub_80FAB10(void);
+struct RegionMap
+{
+ u8 mapSecName[0x14];
+ u16 mapSecId;
+ u8 unk16;
+ u8 everGrandeCityArea;
+ u8 (*inputCallback)(void);
+ struct Sprite *cursorSprite;
+ struct Sprite *playerIconSprite;
+ s32 bg2x;
+ s32 bg2y;
+ u32 unk2C; //
+ u32 unk30; // Map rotation parameters
+ u32 unk34; // Likely a scrapped feature
+ u32 unk38; //
+ s32 unk3C;
+ s32 unk40;
+ s32 unk44;
+ s32 unk48;
+ s32 unk4C;
+ s32 unk50;
+ u16 cursorPosX;
+ u16 cursorPosY;
+ u16 cursorTileTag;
+ u16 cursorPaletteTag;
+ s16 scrollX;
+ s16 scrollY;
+ s16 unk60;
+ s16 unk62;
+ u16 unk64;
+ u16 unk66;
+ u16 unk68;
+ u16 unk6A;
+ u16 unk6C;
+ u16 unk6E;
+ u16 playerIconTileTag;
+ u16 playerIconPaletteTag;
+ u16 unk74;
+ u16 unk76;
+ bool8 zoomed;
+ u8 initStep;
+ s8 unk7A;
+ s8 cursorDeltaX;
+ s8 cursorDeltaY;
+ bool8 needUpdateVideoRegs;
+ bool8 blinkPlayerIcon;
+ bool8 playerIsInCave;
+ /*0x080*/ u8 filler80[0x100];
+ /*0x180*/ u8 cursorSmallImage[0x100];
+ /*0x280*/ u8 cursorLargeImage[0x600];
+};
+
+void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed);
+void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed);
+bool8 sub_80FA940(void);
+void FreeRegionMapIconResources(void);
u8 sub_80FAB60(void);
-void sub_80FBB3C(u16, u16);
-void sub_80FBCF0(u32, u8);
-void sub_80FBFB4(u8 *str, u16 region, u8);
-void CopyMapName();
-u8 *CopyLocationName(u8 *dest, u8 location);
+void sub_80FAEC4(void);
+u8 sub_80FAFC0(void);
+void UpdateRegionMapVideoRegs(void);
+void sub_80FB2A4(s16, s16);
+u16 sub_80FBA04(u16 mapSecId);
+void CreateRegionMapCursor(u16, u16);
+void CreateRegionMapPlayerIcon(u16, u16);
+const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length);
+const u8 *CopyMapName(u8 *dest, u16 b);
+const u8 *CopyLocationName(u8 *dest, u16 b);
#endif // GUARD_REGION_MAP_H
diff --git a/include/rom4.h b/include/rom4.h
index 803a38162..14a4cecfa 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -55,7 +55,7 @@ void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId);
void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
-// sub_8053538
+void sub_8053538(u8);
void sub_8053570(void);
void sub_8053588(u8);
void sub_80535C4(s16 a1, s16 a2);
diff --git a/include/secret_base.h b/include/secret_base.h
index 3ea75ce27..bb747bb02 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -7,6 +7,7 @@ u8 sub_80BBB24(void);
void sub_80BBCCC(u8);
void sub_80BC038();
u8 sub_80BC050();
+u8 *GetSecretBaseMapName(u8 *);
void sub_80BC300();
const u8 sub_80BCCA4(u8);
u8 *sub_80BCCE8(void);
diff --git a/ld_script.txt b/ld_script.txt
index 0cd9e4794..4bd19d780 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -198,7 +198,7 @@ SECTIONS {
src/script_pokemon_util_80F99CC.o(.text);
src/dewford_trend.o(.text);
src/heal_location.o(.text);
- asm/region_map.o(.text);
+ src/region_map.o(.text);
asm/cute_sketch.o(.text);
src/decoration.o(.text);
asm/slot_machine.o(.text);
@@ -427,7 +427,7 @@ SECTIONS {
data/mail.o(.rodata);
src/menu_helpers.o(.rodata);
src/heal_location.o(.rodata);
- data/region_map.o(.rodata);
+ src/region_map.o(.rodata);
data/cute_sketch.o(.rodata);
src/decoration.o(.rodata);
data/slot_machine.o(.rodata);
diff --git a/src/data/region_map_layout.h b/src/data/region_map_layout.h
new file mode 100644
index 000000000..ca33ef37a
--- /dev/null
+++ b/src/data/region_map_layout.h
@@ -0,0 +1,42 @@
+// Abbreviated definitions to make the map layout more visual
+#define R(routeNum) MAPSEC_ROUTE_##routeNum
+#define LITT_T MAPSEC_LITTLEROOT_TOWN
+#define OLDA_T MAPSEC_OLDALE_TOWN
+#define DEWF_T MAPSEC_DEWFORD_TOWN
+#define LAVA_T MAPSEC_LAVARIDGE_TOWN
+#define FALL_T MAPSEC_FALLARBOR_TOWN
+#define VERD_T MAPSEC_VERDANTURF_TOWN
+#define PACI_T MAPSEC_PACIFIDLOG_TOWN
+#define PETA_C MAPSEC_PETALBURG_CITY
+#define SLAT_C MAPSEC_SLATEPORT_CITY
+#define MAUV_C MAPSEC_MAUVILLE_CITY
+#define RUST_C MAPSEC_RUSTBORO_CITY
+#define FORT_C MAPSEC_FORTREE_CITY
+#define LILY_C MAPSEC_LILYCOVE_CITY
+#define MOSS_C MAPSEC_MOSSDEEP_CITY
+#define SOOT_C MAPSEC_SOOTOPOLIS_CITY
+#define EVER_C MAPSEC_EVER_GRANDE_CITY
+#define MTCHIM MAPSEC_MT_CHIMNEY
+#define SAFARI MAPSEC_SAFARI_ZONE
+#define BTLTWR MAPSEC_BATTLE_TOWER
+#define S_ISLD MAPSEC_SOUTHERN_ISLAND
+#define ______ MAPSEC_NONE
+
+static const u8 sRegionMapLayout[] =
+{
+ ______, R(114), R(114), FALL_T, R(113), R(113), R(113), R(113), R(111), ______, ______, R(119), FORT_C, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ ______, R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ R(115), R(114), ______, ______, ______, ______, MTCHIM, MTCHIM, R(111), ______, ______, R(119), ______, R(120), ______, ______, SAFARI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ R(115), ______, ______, ______, ______, LAVA_T, R(112), R(112), R(111), ______, ______, R(119), ______, R(120), R(121), R(121), R(121), R(121), LILY_C, LILY_C, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______,
+ R(115), ______, ______, ______, ______, ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), R(125), R(125), ______, ______,
+ RUST_C, R(116), R(116), R(116), R(116), ______, ______, ______, R(111), ______, ______, R(119), ______, ______, ______, ______, R(122), ______, ______, ______, R(124), R(124), R(124), R(124), MOSS_C, MOSS_C, ______, ______,
+ RUST_C, ______, ______, ______, VERD_T, R(117), R(117), R(117), MAUV_C, MAUV_C, R(118), R(118), R(123), R(123), R(123), R(123), R(123), ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, ______,
+ R(104), ______, ______, ______, ______, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), SOOT_C, R(126), R(127), R(127), R(127), ______, ______,
+ R(104), ______, ______, ______, R(103), R(103), R(103), R(103), R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(126), R(126), R(126), R(127), R(127), R(127), ______, EVER_C,
+ R(104), PETA_C, R(102), R(102), OLDA_T, ______, ______, ______, R(110), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, R(128), R(128), R(128), R(128), EVER_C,
+ R(105), ______, ______, ______, R(101), ______, ______, ______, SLAT_C, R(134), R(134), R(134), R(133), R(133), R(133), R(132), R(132), PACI_T, R(131), R(131), R(131), R(130), R(130), R(130), R(129), R(129), ______, ______,
+ R(105), ______, ______, ______, LITT_T, ______, ______, ______, SLAT_C, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ R(105), ______, ______, ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, BTLTWR, ______, ______, ______, ______, ______,
+ R(106), R(106), R(106), ______, ______, ______, ______, ______, R(109), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, DEWF_T, R(107), R(107), R(107), R(108), R(108), R(109), ______, ______, ______, S_ISLD, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+};
diff --git a/src/data/region_map_names_de.h b/src/data/region_map_names_de.h
new file mode 100644
index 000000000..10f53c8ba
--- /dev/null
+++ b/src/data/region_map_names_de.h
@@ -0,0 +1,79 @@
+const u8 gMapName_LittlerootTown[] = _("WURZELHEIM");
+const u8 gMapName_OldaleTown[] = _("ROSALTSTADT");
+const u8 gMapName_DewfordTown[] = _("FAUSTAUHAVEN");
+const u8 gMapName_LavaridgeTown[] = _("BAD LAVASTADT");
+const u8 gMapName_FallarborTown[] = _("LAUBWECHSEL{NAME_END}FELD");
+const u8 gMapName_VerdanturfTown[] = _("WIESENFLUR");
+const u8 gMapName_PacifidlogTown[] = _("FLOSSBRUNN");
+const u8 gMapName_PetalburgCity[] = _("BLÜTENBURG{NAME_END} CITY");
+const u8 gMapName_SlateportCity[] = _("GRAPHITPORT{NAME_END} CITY");
+const u8 gMapName_MauvilleCity[] = _("MALVENFROH{NAME_END} CITY");
+const u8 gMapName_RustboroCity[] = _("METAROST{NAME_END} CITY");
+const u8 gMapName_FortreeCity[] = _("BAUMHAUSEN{NAME_END} CITY");
+const u8 gMapName_LilycoveCity[] = _("SEEGRASULB{NAME_END} CITY");
+const u8 gMapName_MossdeepCity[] = _("MOOSBACH{NAME_END} CITY");
+const u8 gMapName_SootopolisCity[] = _("XENEROVILLE");
+const u8 gMapName_EverGrandeCity[] = _("PRACHTPOLIS{NAME_END} CITY");
+const u8 gMapName_Route101[] = _("ROUTE 101");
+const u8 gMapName_Route102[] = _("ROUTE 102");
+const u8 gMapName_Route103[] = _("ROUTE 103");
+const u8 gMapName_Route104[] = _("ROUTE 104");
+const u8 gMapName_Route105[] = _("ROUTE 105");
+const u8 gMapName_Route106[] = _("ROUTE 106");
+const u8 gMapName_Route107[] = _("ROUTE 107");
+const u8 gMapName_Route108[] = _("ROUTE 108");
+const u8 gMapName_Route109[] = _("ROUTE 109");
+const u8 gMapName_Route110[] = _("ROUTE 110");
+const u8 gMapName_Route111[] = _("ROUTE 111");
+const u8 gMapName_Route112[] = _("ROUTE 112");
+const u8 gMapName_Route113[] = _("ROUTE 113");
+const u8 gMapName_Route114[] = _("ROUTE 114");
+const u8 gMapName_Route115[] = _("ROUTE 115");
+const u8 gMapName_Route116[] = _("ROUTE 116");
+const u8 gMapName_Route117[] = _("ROUTE 117");
+const u8 gMapName_Route118[] = _("ROUTE 118");
+const u8 gMapName_Route119[] = _("ROUTE 119");
+const u8 gMapName_Route120[] = _("ROUTE 120");
+const u8 gMapName_Route121[] = _("ROUTE 121");
+const u8 gMapName_Route122[] = _("ROUTE 122");
+const u8 gMapName_Route123[] = _("ROUTE 123");
+const u8 gMapName_Route124[] = _("ROUTE 124");
+const u8 gMapName_Route125[] = _("ROUTE 125");
+const u8 gMapName_Route126[] = _("ROUTE 126");
+const u8 gMapName_Route127[] = _("ROUTE 127");
+const u8 gMapName_Route128[] = _("ROUTE 128");
+const u8 gMapName_Route129[] = _("ROUTE 129");
+const u8 gMapName_Route130[] = _("ROUTE 130");
+const u8 gMapName_Route131[] = _("ROUTE 131");
+const u8 gMapName_Route132[] = _("ROUTE 132");
+const u8 gMapName_Route133[] = _("ROUTE 133");
+const u8 gMapName_Route134[] = _("ROUTE 134");
+const u8 gMapName_Underwater[] = _("UNTERWASSER");
+const u8 gMapName_GraniteCave[] = _("GRANITHÖHLE");
+const u8 gMapName_MtChimney[] = _("SCHLOTBERG");
+const u8 gMapName_SafariZone[] = _("SAFARI-ZONE");
+const u8 gMapName_BattleTower[] = _("DUELLTURM");
+const u8 gMapName_PetalburgWoods[] = _("BLÜTENBURGWALD");
+const u8 gMapName_RusturfTunnel[] = _("METAFLURTUNNEL");
+const u8 gMapName_AbandonedShip[] = _("SCHIFFSWRACK");
+const u8 gMapName_NewMauville[] = _("NEU MALVENFROH");
+const u8 gMapName_MeteorFalls[] = _("METEORFÄLLE");
+const u8 gMapName_MtPyre[] = _("PYROBERG");
+const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM}s VERSTECK");
+const u8 gMapName_ShoalCave[] = _("KÜSTENHÖHLE");
+const u8 gMapName_SeafloorCavern[] = _("TIEFSEEHÖHLE");
+const u8 gMapName_VictoryRoad[] = _("SIEGESSTRASSE");
+const u8 gMapName_MirageIsland[] = _("WUNDEREILAND");
+const u8 gMapName_CaveOfOrigin[] = _("URZEITHÖHLE");
+const u8 gMapName_SouthernIsland[] = _("INSEL IM SÜDEN");
+const u8 gMapName_FieryPath[] = _("FEURIGER PFAD");
+const u8 gMapName_JaggedPass[] = _("STEILPASS");
+const u8 gMapName_SealedChamber[] = _("SIEGELKAMMER");
+const u8 gMapName_ScorchedSlab[] = _("SONNENGROTTE");
+const u8 gMapName_IslandCave[] = _("INSELHÖHLE");
+const u8 gMapName_DesertRuins[] = _("WÜSTENRUINE");
+const u8 gMapName_AncientTomb[] = _("GRABMAL");
+const u8 gMapName_InsideOfTruck[] = _("IM MÖBELWAGEN");
+const u8 gMapName_SkyPillar[] = _("HIMMELTURM");
+const u8 gMapName_SecretBase[] = _("GEHEIMBASIS");
+const u8 gMapName_None[] = _("");
diff --git a/src/data/region_map_names_en.h b/src/data/region_map_names_en.h
new file mode 100644
index 000000000..9dde3d71a
--- /dev/null
+++ b/src/data/region_map_names_en.h
@@ -0,0 +1,79 @@
+const u8 gMapName_LittlerootTown[] = _("LITTLEROOT{NAME_END} TOWN");
+const u8 gMapName_OldaleTown[] = _("OLDALE{NAME_END} TOWN");
+const u8 gMapName_DewfordTown[] = _("DEWFORD{NAME_END} TOWN");
+const u8 gMapName_LavaridgeTown[] = _("LAVARIDGE{NAME_END} TOWN");
+const u8 gMapName_FallarborTown[] = _("FALLARBOR{NAME_END} TOWN");
+const u8 gMapName_VerdanturfTown[] = _("VERDANTURF{NAME_END} TOWN");
+const u8 gMapName_PacifidlogTown[] = _("PACIFIDLOG{NAME_END} TOWN");
+const u8 gMapName_PetalburgCity[] = _("PETALBURG{NAME_END} CITY");
+const u8 gMapName_SlateportCity[] = _("SLATEPORT{NAME_END} CITY");
+const u8 gMapName_MauvilleCity[] = _("MAUVILLE{NAME_END} CITY");
+const u8 gMapName_RustboroCity[] = _("RUSTBORO{NAME_END} CITY");
+const u8 gMapName_FortreeCity[] = _("FORTREE{NAME_END} CITY");
+const u8 gMapName_LilycoveCity[] = _("LILYCOVE{NAME_END} CITY");
+const u8 gMapName_MossdeepCity[] = _("MOSSDEEP{NAME_END} CITY");
+const u8 gMapName_SootopolisCity[] = _("SOOTOPOLIS{NAME_END} CITY");
+const u8 gMapName_EverGrandeCity[] = _("EVER GRANDE{NAME_END} CITY");
+const u8 gMapName_Route101[] = _("ROUTE 101");
+const u8 gMapName_Route102[] = _("ROUTE 102");
+const u8 gMapName_Route103[] = _("ROUTE 103");
+const u8 gMapName_Route104[] = _("ROUTE 104");
+const u8 gMapName_Route105[] = _("ROUTE 105");
+const u8 gMapName_Route106[] = _("ROUTE 106");
+const u8 gMapName_Route107[] = _("ROUTE 107");
+const u8 gMapName_Route108[] = _("ROUTE 108");
+const u8 gMapName_Route109[] = _("ROUTE 109");
+const u8 gMapName_Route110[] = _("ROUTE 110");
+const u8 gMapName_Route111[] = _("ROUTE 111");
+const u8 gMapName_Route112[] = _("ROUTE 112");
+const u8 gMapName_Route113[] = _("ROUTE 113");
+const u8 gMapName_Route114[] = _("ROUTE 114");
+const u8 gMapName_Route115[] = _("ROUTE 115");
+const u8 gMapName_Route116[] = _("ROUTE 116");
+const u8 gMapName_Route117[] = _("ROUTE 117");
+const u8 gMapName_Route118[] = _("ROUTE 118");
+const u8 gMapName_Route119[] = _("ROUTE 119");
+const u8 gMapName_Route120[] = _("ROUTE 120");
+const u8 gMapName_Route121[] = _("ROUTE 121");
+const u8 gMapName_Route122[] = _("ROUTE 122");
+const u8 gMapName_Route123[] = _("ROUTE 123");
+const u8 gMapName_Route124[] = _("ROUTE 124");
+const u8 gMapName_Route125[] = _("ROUTE 125");
+const u8 gMapName_Route126[] = _("ROUTE 126");
+const u8 gMapName_Route127[] = _("ROUTE 127");
+const u8 gMapName_Route128[] = _("ROUTE 128");
+const u8 gMapName_Route129[] = _("ROUTE 129");
+const u8 gMapName_Route130[] = _("ROUTE 130");
+const u8 gMapName_Route131[] = _("ROUTE 131");
+const u8 gMapName_Route132[] = _("ROUTE 132");
+const u8 gMapName_Route133[] = _("ROUTE 133");
+const u8 gMapName_Route134[] = _("ROUTE 134");
+const u8 gMapName_Underwater[] = _("UNDERWATER");
+const u8 gMapName_GraniteCave[] = _("GRANITE CAVE");
+const u8 gMapName_MtChimney[] = _("MT. CHIMNEY");
+const u8 gMapName_SafariZone[] = _("SAFARI ZONE");
+const u8 gMapName_BattleTower[] = _("BATTLE TOWER");
+const u8 gMapName_PetalburgWoods[] = _("PETALBURG WOODS");
+const u8 gMapName_RusturfTunnel[] = _("RUSTURF TUNNEL");
+const u8 gMapName_AbandonedShip[] = _("ABANDONED SHIP");
+const u8 gMapName_NewMauville[] = _("NEW MAUVILLE");
+const u8 gMapName_MeteorFalls[] = _("METEOR FALLS");
+const u8 gMapName_MtPyre[] = _("MT. PYRE");
+const u8 gMapName_EvilTeamHideout[] = _("{EVIL_TEAM} HIDEOUT");
+const u8 gMapName_ShoalCave[] = _("SHOAL CAVE");
+const u8 gMapName_SeafloorCavern[] = _("SEAFLOOR CAVERN");
+const u8 gMapName_VictoryRoad[] = _("VICTORY ROAD");
+const u8 gMapName_MirageIsland[] = _("MIRAGE ISLAND");
+const u8 gMapName_CaveOfOrigin[] = _("CAVE OF ORIGIN");
+const u8 gMapName_SouthernIsland[] = _("SOUTHERN ISLAND");
+const u8 gMapName_FieryPath[] = _("FIERY PATH");
+const u8 gMapName_JaggedPass[] = _("JAGGED PASS");
+const u8 gMapName_SealedChamber[] = _("SEALED CHAMBER");
+const u8 gMapName_ScorchedSlab[] = _("SCORCHED SLAB");
+const u8 gMapName_IslandCave[] = _("ISLAND CAVE");
+const u8 gMapName_DesertRuins[] = _("DESERT RUINS");
+const u8 gMapName_AncientTomb[] = _("ANCIENT TOMB");
+const u8 gMapName_InsideOfTruck[] = _("INSIDE OF TRUCK");
+const u8 gMapName_SkyPillar[] = _("SKY PILLAR");
+const u8 gMapName_SecretBase[] = _("SECRET BASE");
+const u8 gMapName_None[] = _("");
diff --git a/src/field_region_map.c b/src/field_region_map.c
index 58b0e37bc..7cb22e5df 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -19,11 +19,13 @@ struct UnkStruct
{
MainCallback callback;
u8 filler[4];
+ // This should be RegionMap, but I can't do that because it overlaps unk888.
struct RegionMapStruct unk8;
u16 unk888;
};
-extern struct UnkStruct unk_2000000;
+extern u8 ewram[];
+#define unk_2000000 (*(struct UnkStruct *)(ewram))
void FieldInitRegionMap(MainCallback callback)
{
@@ -46,9 +48,10 @@ void CB2_FieldInitRegionMap(void)
REG_BG3VOFS = 0;
ResetSpriteData();
FreeAllSpritePalettes();
- sub_80FA8EC((u32)&unk_2000000.unk8, 0);
- sub_80FBCF0(0, 0);
- sub_80FBB3C(1, 1);
+ // TODO: remove this cast
+ InitRegionMap((void *)&unk_2000000.unk8, 0);
+ CreateRegionMapPlayerIcon(0, 0);
+ CreateRegionMapCursor(1, 1);
SetUpWindowConfig(&gWindowConfig_81E709C);
InitMenuWindow(&gWindowConfig_81E709C);
MenuZeroFillScreen();
@@ -107,7 +110,7 @@ void sub_813EFDC(void)
case 4:
if (!gPaletteFade.active)
{
- sub_80FAB10();
+ FreeRegionMapIconResources();
SetMainCallback2(unk_2000000.callback);
}
break;
diff --git a/src/field_specials.c b/src/field_specials.c
index 2b505bbfe..71de04f55 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -1761,7 +1761,7 @@ u8 GetPokeblockNameByMonNature(void)
void GetSecretBaseNearbyMapName(void)
{
- sub_80FBFB4(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0);
+ GetMapSectionName(gStringVar1, VarGet(VAR_SECRET_BASE_MAP), 0);
}
u16 sub_810F404(void)
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 303cc3d07..01105d0db 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -101,7 +101,7 @@ void DrawMapNamePopup(void)
u8 name[20];
MenuLoadTextWindowGraphics_OverrideFrameType(0);
- sub_80FBFB4(name, gMapHeader.name, 0);
+ GetMapSectionName(name, gMapHeader.regionMapSectionId, 0);
MenuDrawTextWindow(0, 0, 13, 3);
sub_8072BD8(name, 1, 1, 0x60);
}
diff --git a/src/menu.c b/src/menu.c
index d532fc602..8d80c35aa 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -710,7 +710,7 @@ _08072B3E:\n\
}
#endif
-void MenuPrint_RightAligned(u8 *str, u8 left, u8 top)
+void MenuPrint_RightAligned(const u8 *str, u8 left, u8 top)
{
sub_8004D38(gMenuWindowPtr, str, gMenuTextTileOffset, left, top);
}
diff --git a/src/region_map.c b/src/region_map.c
new file mode 100644
index 000000000..097417357
--- /dev/null
+++ b/src/region_map.c
@@ -0,0 +1,1847 @@
+#include "global.h"
+#include "event_data.h"
+#include "field_effect.h"
+#include "field_specials.h"
+#include "m4a.h"
+#include "main.h"
+#include "map_constants.h"
+#include "menu.h"
+#include "palette.h"
+#include "pokemon_menu.h"
+#include "region_map.h"
+#include "rom4.h"
+#include "secret_base.h"
+#include "songs.h"
+#include "sprite.h"
+#include "strings.h"
+#include "string_util.h"
+#include "text.h"
+#include "trig.h"
+
+// Map Section IDs
+#define MAPSEC_LITTLEROOT_TOWN 0
+#define MAPSEC_OLDALE_TOWN 1
+#define MAPSEC_DEWFORD_TOWN 2
+#define MAPSEC_LAVARIDGE_TOWN 3
+#define MAPSEC_FALLARBOR_TOWN 4
+#define MAPSEC_VERDANTURF_TOWN 5
+#define MAPSEC_PACIFIDLOG_TOWN 6
+#define MAPSEC_PETALBURG_CITY 7
+#define MAPSEC_SLATEPORT_CITY 8
+#define MAPSEC_MAUVILLE_CITY 9
+#define MAPSEC_RUSTBORO_CITY 10
+#define MAPSEC_FORTREE_CITY 11
+#define MAPSEC_LILYCOVE_CITY 12
+#define MAPSEC_MOSSDEEP_CITY 13
+#define MAPSEC_SOOTOPOLIS_CITY 14
+#define MAPSEC_EVER_GRANDE_CITY 15
+#define MAPSEC_ROUTE_101 0x10
+#define MAPSEC_ROUTE_102 0x11
+#define MAPSEC_ROUTE_103 0x12
+#define MAPSEC_ROUTE_104 0x13
+#define MAPSEC_ROUTE_105 0x14
+#define MAPSEC_ROUTE_106 0x15
+#define MAPSEC_ROUTE_107 0x16
+#define MAPSEC_ROUTE_108 0x17
+#define MAPSEC_ROUTE_109 0x18
+#define MAPSEC_ROUTE_110 0x19
+#define MAPSEC_ROUTE_111 0x1A
+#define MAPSEC_ROUTE_112 0x1B
+#define MAPSEC_ROUTE_113 0x1C
+#define MAPSEC_ROUTE_114 0x1D
+#define MAPSEC_ROUTE_115 0x1E
+#define MAPSEC_ROUTE_116 0x1F
+#define MAPSEC_ROUTE_117 0x20
+#define MAPSEC_ROUTE_118 0x21
+#define MAPSEC_ROUTE_119 0x22
+#define MAPSEC_ROUTE_120 0x23
+#define MAPSEC_ROUTE_121 0x24
+#define MAPSEC_ROUTE_122 0x25
+#define MAPSEC_ROUTE_123 0x26
+#define MAPSEC_ROUTE_124 0x27
+#define MAPSEC_ROUTE_125 0x28
+#define MAPSEC_ROUTE_126 0x29
+#define MAPSEC_ROUTE_127 0x2A
+#define MAPSEC_ROUTE_128 0x2B
+#define MAPSEC_ROUTE_129 0x2C
+#define MAPSEC_ROUTE_130 0x2D
+#define MAPSEC_ROUTE_131 0x2E
+#define MAPSEC_ROUTE_132 0x2F
+#define MAPSEC_ROUTE_133 0x30
+#define MAPSEC_ROUTE_134 0x31
+#define MAPSEC_UNDERWATER1 0x32
+#define MAPSEC_UNDERWATER2 0x33
+#define MAPSEC_UNDERWATER3 0x34
+#define MAPSEC_UNDERWATER4 0x35
+#define MAPSEC_UNDERWATER5 0x36
+#define MAPSEC_GRANITE_CAVE 0x37
+#define MAPSEC_MT_CHIMNEY 0x38
+#define MAPSEC_SAFARI_ZONE 0x39
+#define MAPSEC_BATTLE_TOWER 0x3A
+#define MAPSEC_PETALBURG_WOODS 0x3B
+#define MAPSEC_RUSTURF_TUNNEL 0x3C
+#define MAPSEC_ABANDONED_SHIP 0x3D
+#define MAPSEC_NEW_MAUVILLE 0x3E
+#define MAPSEC_METEOR_FALLS_1 0x3F
+#define MAPSEC_METEOR_FALLS_2 0x40
+#define MAPSEC_MT_PYRE 0x41
+#define MAPSEC_EVIL_TEAM_HIDEOUT 0x42
+#define MAPSEC_SHOAL_CAVE 0x43
+#define MAPSEC_SEAFLOOR_CAVERN 0x44
+#define MAPSEC_UNDERWATER6 0x45
+#define MAPSEC_VICTORY_ROAD 0x46
+#define MAPSEC_MIRAGE_ISLAND 0x47
+#define MAPSEC_CAVE_OF_ORIGIN 0x48
+#define MAPSEC_SOUTHERN_ISLAND 0x49
+#define MAPSEC_FIERY_PATH_1 0x4A
+#define MAPSEC_FIERY_PATH_2 0x4B
+#define MAPSEC_JAGGED_PASS_1 0x4C
+#define MAPSEC_JAGGED_PASS_2 0x4D
+#define MAPSEC_SEALED_CHAMBER 0x4E
+#define MAPSEC_UNDERWATER7 0x4F
+#define MAPSEC_SCORCHED_SLAB 0x50
+#define MAPSEC_ISLAND_CAVE 0x51
+#define MAPSEC_DESERT_RUINS 0x52
+#define MAPSEC_ANCIENT_TOMB 0x53
+#define MAPSEC_INSIDE_OF_TRUCK 0x54
+#define MAPSEC_SKY_PILLAR 0x55
+#define MAPSEC_SECRET_BASE 0x56
+#define MAPSEC_UNK_0x57 0x57
+#define MAPSEC_NONE 0x58
+
+#define MAP_WIDTH 28
+#define MAP_HEIGHT 15
+#define MAPCURSOR_X_MIN 1
+#define MAPCURSOR_Y_MIN 2
+#define MAPCURSOR_X_MAX (MAPCURSOR_X_MIN + MAP_WIDTH - 1)
+#define MAPCURSOR_Y_MAX (MAPCURSOR_Y_MIN + MAP_HEIGHT - 1)
+
+// Input events
+enum
+{
+ INPUT_EVENT_NONE,
+ INPUT_EVENT_DPAD,
+ INPUT_EVENT_2,
+ INPUT_EVENT_3,
+ INPUT_EVENT_A_BUTTON,
+ INPUT_EVENT_B_BUTTON,
+};
+
+extern struct RegionMap *gRegionMap;
+
+static const u16 sRegionMapCursor_Pal[] = INCBIN_U16("graphics/pokenav/cursor.gbapal");
+static const u8 sRegionMapCursorSmall_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_small.4bpp.lz");
+static const u8 sRegionMapCursorLarge_ImageLZ[] = INCBIN_U8("graphics/pokenav/cursor_large.4bpp.lz");
+static const u16 sRegionMapBrendanIcon_Pal[] = INCBIN_U16("graphics/pokenav/brendan_icon.gbapal");
+static const u8 sRegionMapBrendanIcon_Image[] = INCBIN_U8("graphics/pokenav/brendan_icon.4bpp");
+static const u16 sRegionMapMayIcon_Pal[] = INCBIN_U16("graphics/pokenav/may_icon.gbapal");
+static const u8 sRegionMapMayIcon_Image[] = INCBIN_U8("graphics/pokenav/may_icon.4bpp");
+static const u16 sRegionMapBkgnd_Pal[] = INCBIN_U16("graphics/pokenav/region_map.gbapal");
+static const u8 sRegionMapBkgnd_ImageLZ[] = INCBIN_U8("graphics/pokenav/region_map.8bpp.lz");
+static const u8 sRegionMapBkgnd_TilemapLZ[] = INCBIN_U8("graphics/pokenav/region_map_map.bin.lz");
+
+#include "data/region_map_layout.h"
+
+#if ENGLISH
+#include "data/region_map_names_en.h"
+#elif GERMAN
+#include "data/region_map_names_de.h"
+#endif
+
+struct RegionMapLocation
+{
+ u8 x, y;
+ u8 width, height;
+ const u8 *regionMapSectionId;
+};
+
+const struct RegionMapLocation gRegionMapLocations[] =
+{
+ { 4, 11, 1, 1, gMapName_LittlerootTown},
+ { 4, 9, 1, 1, gMapName_OldaleTown},
+ { 2, 14, 1, 1, gMapName_DewfordTown},
+ { 5, 3, 1, 1, gMapName_LavaridgeTown},
+ { 3, 0, 1, 1, gMapName_FallarborTown},
+ { 4, 6, 1, 1, gMapName_VerdanturfTown},
+ {17, 10, 1, 1, gMapName_PacifidlogTown},
+ { 1, 9, 1, 1, gMapName_PetalburgCity},
+ { 8, 10, 1, 2, gMapName_SlateportCity},
+ { 8, 6, 2, 1, gMapName_MauvilleCity},
+ { 0, 5, 1, 2, gMapName_RustboroCity},
+ {12, 0, 1, 1, gMapName_FortreeCity},
+ {18, 3, 2, 1, gMapName_LilycoveCity},
+ {24, 5, 2, 1, gMapName_MossdeepCity},
+ {21, 7, 1, 1, gMapName_SootopolisCity},
+ {27, 8, 1, 2, gMapName_EverGrandeCity},
+ { 4, 10, 1, 1, gMapName_Route101},
+ { 2, 9, 2, 1, gMapName_Route102},
+ { 4, 8, 4, 1, gMapName_Route103},
+ { 0, 7, 1, 3, gMapName_Route104},
+ { 0, 10, 1, 3, gMapName_Route105},
+ { 0, 13, 2, 1, gMapName_Route106},
+ { 3, 14, 3, 1, gMapName_Route107},
+ { 6, 14, 2, 1, gMapName_Route108},
+ { 8, 12, 1, 3, gMapName_Route109},
+ { 8, 7, 1, 3, gMapName_Route110},
+ { 8, 0, 1, 6, gMapName_Route111},
+ { 6, 3, 2, 1, gMapName_Route112},
+ { 4, 0, 4, 1, gMapName_Route113},
+ { 1, 0, 2, 3, gMapName_Route114},
+ { 0, 2, 1, 3, gMapName_Route115},
+ { 1, 5, 4, 1, gMapName_Route116},
+ { 5, 6, 3, 1, gMapName_Route117},
+ {10, 6, 2, 1, gMapName_Route118},
+ {11, 0, 1, 6, gMapName_Route119},
+ {13, 0, 1, 4, gMapName_Route120},
+ {14, 3, 4, 1, gMapName_Route121},
+ {16, 4, 1, 2, gMapName_Route122},
+ {12, 6, 5, 1, gMapName_Route123},
+ {20, 3, 4, 3, gMapName_Route124},
+ {24, 3, 2, 2, gMapName_Route125},
+ {20, 6, 3, 3, gMapName_Route126},
+ {23, 6, 3, 3, gMapName_Route127},
+ {23, 9, 4, 1, gMapName_Route128},
+ {24, 10, 2, 1, gMapName_Route129},
+ {21, 10, 3, 1, gMapName_Route130},
+ {18, 10, 3, 1, gMapName_Route131},
+ {15, 10, 2, 1, gMapName_Route132},
+ {12, 10, 3, 1, gMapName_Route133},
+ { 9, 10, 3, 1, gMapName_Route134},
+ {20, 3, 4, 3, gMapName_Underwater},
+ {20, 6, 3, 3, gMapName_Underwater},
+ {23, 6, 3, 3, gMapName_Underwater},
+ {23, 9, 4, 1, gMapName_Underwater},
+ {21, 7, 1, 1, gMapName_Underwater},
+ { 1, 13, 1, 1, gMapName_GraniteCave},
+ { 6, 2, 1, 1, gMapName_MtChimney},
+ {16, 2, 1, 1, gMapName_SafariZone},
+ {22, 12, 1, 1, gMapName_BattleTower},
+ { 0, 8, 1, 1, gMapName_PetalburgWoods},
+ { 2, 5, 1, 1, gMapName_RusturfTunnel},
+ { 6, 14, 1, 1, gMapName_AbandonedShip},
+ { 8, 7, 1, 1, gMapName_NewMauville},
+ { 0, 3, 1, 1, gMapName_MeteorFalls},
+ { 1, 2, 1, 1, gMapName_MeteorFalls},
+ {16, 4, 1, 1, gMapName_MtPyre},
+ {19, 3, 1, 1, gMapName_EvilTeamHideout},
+ {24, 4, 1, 1, gMapName_ShoalCave},
+ {24, 9, 1, 1, gMapName_SeafloorCavern},
+ {24, 9, 1, 1, gMapName_Underwater},
+ {27, 9, 1, 1, gMapName_VictoryRoad},
+ {17, 10, 1, 1, gMapName_MirageIsland},
+ {21, 7, 1, 1, gMapName_CaveOfOrigin},
+ {12, 14, 1, 1, gMapName_SouthernIsland},
+ { 6, 3, 1, 1, gMapName_FieryPath},
+ { 7, 3, 1, 1, gMapName_FieryPath},
+ { 6, 3, 1, 1, gMapName_JaggedPass},
+ { 7, 2, 1, 1, gMapName_JaggedPass},
+ {11, 10, 1, 1, gMapName_SealedChamber},
+ {11, 10, 1, 1, gMapName_Underwater},
+ {13, 0, 1, 1, gMapName_ScorchedSlab},
+ {0, 10, 1, 1, gMapName_IslandCave},
+ { 8, 3, 1, 1, gMapName_DesertRuins},
+ {13, 2, 1, 1, gMapName_AncientTomb},
+ { 0, 0, 1, 1, gMapName_InsideOfTruck},
+ {19, 10, 1, 1, gMapName_SkyPillar},
+ { 0, 0, 1, 1, gMapName_SecretBase},
+ { 0, 0, 1, 1, gMapName_None},
+};
+
+static const u16 gUnknown_083E7684[][2] =
+{
+ {MAPSEC_UNDERWATER1, MAPSEC_ROUTE_124},
+ {MAPSEC_UNDERWATER2, MAPSEC_ROUTE_126},
+ {MAPSEC_UNDERWATER3, MAPSEC_ROUTE_127},
+ {MAPSEC_UNDERWATER4, MAPSEC_ROUTE_128},
+ {MAPSEC_UNDERWATER5, MAPSEC_SOOTOPOLIS_CITY},
+ {MAPSEC_UNDERWATER6, MAPSEC_ROUTE_128},
+ {MAPSEC_EVIL_TEAM_HIDEOUT, MAPSEC_LILYCOVE_CITY},
+ {MAPSEC_UNDERWATER7, MAPSEC_ROUTE_134},
+ {MAPSEC_PETALBURG_WOODS, MAPSEC_ROUTE_104},
+ {MAPSEC_JAGGED_PASS_1, MAPSEC_ROUTE_112},
+ {MAPSEC_MT_PYRE, MAPSEC_ROUTE_122},
+ {MAPSEC_SKY_PILLAR, MAPSEC_ROUTE_131},
+ {MAPSEC_NONE, MAPSEC_NONE},
+};
+
+static u8 sub_80FAB78(void);
+static u8 _swiopen(void);
+static u8 sub_80FAD04(void);
+static u8 sub_80FADE4(void);
+static void CalcZoomScrollParams(s16, s16, s16, s16, u16, u16, u8);
+static void sub_80FB238(s16, s16);
+void UpdateRegionMapVideoRegs(void);
+static u16 GetRegionMapSectionAt(u16, u16);
+static void InitializeCursorPosition(void);
+static void sub_80FB600(void);
+static u16 sub_80FB758(u16);
+static u16 sub_80FB9C0(u16);
+static void sub_80FBA18(void);
+static bool8 sub_80FBAA0(u16);
+void CreateRegionMapCursor(u16, u16);
+static void sub_80FBCA0(void);
+static void sub_80FBDF8(void);
+static void sub_80FBE24(void);
+static void SpriteCB_PlayerIconZoomedOut(struct Sprite *);
+static void UpdateIconBlink(struct Sprite *);
+static void SpriteCB_PlayerIconZoomedIn(struct Sprite *);
+const u8 *GetMapSectionName(u8 *, u16, u16);
+static void VBlankCB_FlyRegionMap(void);
+static void CB2_FlyRegionMap(void);
+static void sub_80FC244(void (*func)(void));
+static void PrintFlyTargetName(void);
+static void CreateFlyTargetGraphics(void);
+static void CreateCityTownFlyTargetIcons(void);
+static void CreateSpecialAreaFlyTargetIcons(void);
+static void SpriteCB_FlyTargetIcons(struct Sprite *);
+static void sub_80FC5B4(void);
+static void sub_80FC600(void);
+static void sub_80FC69C(void);
+
+void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed)
+{
+ sub_80FA904(regionMap, zoomed);
+ while (sub_80FA940())
+ ;
+}
+
+void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed)
+{
+ gRegionMap = regionMap;
+ gRegionMap->initStep = 0;
+ gRegionMap->zoomed = zoomed;
+ gRegionMap->inputCallback = (zoomed == 0) ? sub_80FAB78 : sub_80FAD04;
+}
+
+bool8 sub_80FA940(void)
+{
+ switch (gRegionMap->initStep)
+ {
+ case 0:
+ LZ77UnCompVram(sRegionMapBkgnd_ImageLZ, (void *)(VRAM + 0x8000));
+ break;
+ case 1:
+ LZ77UnCompVram(sRegionMapBkgnd_TilemapLZ, (void *)(VRAM + 0xE000));
+ break;
+ case 2:
+ LoadPalette(sRegionMapBkgnd_Pal, 0x70, 0x60); // Why isn't this the right size?
+ break;
+ case 3:
+ LZ77UnCompWram(sRegionMapCursorSmall_ImageLZ, gRegionMap->cursorSmallImage);
+ break;
+ case 4:
+ LZ77UnCompWram(sRegionMapCursorLarge_ImageLZ, gRegionMap->cursorLargeImage);
+ break;
+ case 5:
+ InitializeCursorPosition();
+ gRegionMap->unk74 = gRegionMap->cursorPosX;
+ gRegionMap->unk76 = gRegionMap->cursorPosY;
+ gRegionMap->unk16 = sub_80FB758(gRegionMap->mapSecId);
+ gRegionMap->mapSecId = sub_80FB9C0(gRegionMap->mapSecId);
+ GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ break;
+ case 6:
+ if (gRegionMap->zoomed == FALSE)
+ {
+ CalcZoomScrollParams(0, 0, 0, 0, 0x100, 0x100, 0);
+ }
+ else
+ {
+ gRegionMap->scrollX = gRegionMap->cursorPosX * 8 - 52;
+ gRegionMap->scrollY = gRegionMap->cursorPosY * 8 - 68;
+ gRegionMap->unk64 = gRegionMap->cursorPosX;
+ gRegionMap->unk66 = gRegionMap->cursorPosY;
+ CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, 0x80, 0x80, 0);
+ }
+ break;
+ case 7:
+ sub_80FBA18();
+ UpdateRegionMapVideoRegs();
+ gRegionMap->cursorSprite = NULL;
+ gRegionMap->playerIconSprite = NULL;
+ gRegionMap->unk7A = 0;
+ gRegionMap->blinkPlayerIcon = FALSE;
+ REG_BG2CNT = 0xBC8A;
+ gRegionMap->initStep++;
+ default:
+ return FALSE;
+ }
+ gRegionMap->initStep++;
+ return TRUE;
+}
+
+void FreeRegionMapIconResources(void)
+{
+ if (gRegionMap->cursorSprite != NULL)
+ {
+ DestroySprite(gRegionMap->cursorSprite);
+ FreeSpriteTilesByTag(gRegionMap->cursorTileTag);
+ FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag);
+ }
+ if (gRegionMap->playerIconSprite != NULL)
+ {
+ DestroySprite(gRegionMap->playerIconSprite);
+ FreeSpriteTilesByTag(gRegionMap->playerIconTileTag);
+ FreeSpritePaletteByTag(gRegionMap->playerIconPaletteTag);
+ }
+}
+
+u8 sub_80FAB60(void)
+{
+ return gRegionMap->inputCallback();
+}
+
+static u8 sub_80FAB78(void)
+{
+ u8 event = INPUT_EVENT_NONE;
+
+ gRegionMap->cursorDeltaX = 0;
+ gRegionMap->cursorDeltaY = 0;
+ if ((gMain.heldKeys & DPAD_UP) && gRegionMap->cursorPosY > MAPCURSOR_Y_MIN)
+ {
+ gRegionMap->cursorDeltaY = -1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->cursorPosY < MAPCURSOR_Y_MAX)
+ {
+ gRegionMap->cursorDeltaY = 1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->cursorPosX > MAPCURSOR_X_MIN)
+ {
+ gRegionMap->cursorDeltaX = -1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->cursorPosX < MAPCURSOR_X_MAX)
+ {
+ gRegionMap->cursorDeltaX = 1;
+ event = INPUT_EVENT_DPAD;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ event = INPUT_EVENT_A_BUTTON;
+ else if (gMain.newKeys & B_BUTTON)
+ event = INPUT_EVENT_B_BUTTON;
+
+ if (event == INPUT_EVENT_DPAD)
+ {
+ gRegionMap->unk7A = 4;
+ gRegionMap->inputCallback = _swiopen;
+ }
+ return event;
+}
+
+static u8 _swiopen(void)
+{
+ u16 mapSecId;
+
+ if (gRegionMap->unk7A != 0)
+ return INPUT_EVENT_2;
+
+ if (gRegionMap->cursorDeltaX > 0)
+ gRegionMap->cursorPosX++;
+
+ if (gRegionMap->cursorDeltaX < 0)
+ gRegionMap->cursorPosX--;
+
+ if (gRegionMap->cursorDeltaY > 0)
+ gRegionMap->cursorPosY++;
+
+ if (gRegionMap->cursorDeltaY < 0)
+ gRegionMap->cursorPosY--;
+
+ mapSecId = GetRegionMapSectionAt(gRegionMap->cursorPosX, gRegionMap->cursorPosY);
+ gRegionMap->unk16 = sub_80FB758(mapSecId);
+ if (mapSecId != gRegionMap->mapSecId)
+ {
+ gRegionMap->mapSecId = mapSecId;
+ GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ }
+ sub_80FBA18();
+ gRegionMap->inputCallback = sub_80FAB78;
+ return INPUT_EVENT_3;
+}
+
+static u8 sub_80FAD04(void)
+{
+ u8 event = INPUT_EVENT_NONE;
+
+ gRegionMap->unk6A = 0;
+ gRegionMap->unk68 = 0;
+ if ((gMain.heldKeys & DPAD_UP) && gRegionMap->scrollY > -52)
+ {
+ gRegionMap->unk68 = -1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_DOWN) && gRegionMap->scrollY < 60)
+ {
+ gRegionMap->unk68 = 1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_LEFT) && gRegionMap->scrollX > -44)
+ {
+ gRegionMap->unk6A = -1;
+ event = INPUT_EVENT_DPAD;
+ }
+ if ((gMain.heldKeys & DPAD_RIGHT) && gRegionMap->scrollX < 172)
+ {
+ gRegionMap->unk6A = 1;
+ event = INPUT_EVENT_DPAD;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ event = INPUT_EVENT_A_BUTTON;
+ if (gMain.newKeys & B_BUTTON)
+ event = INPUT_EVENT_B_BUTTON;
+
+ if (event == INPUT_EVENT_DPAD)
+ {
+ gRegionMap->inputCallback = sub_80FADE4;
+ gRegionMap->unk6C = 0;
+ }
+ return event;
+}
+
+static u8 sub_80FADE4(void)
+{
+ gRegionMap->scrollY += gRegionMap->unk68;
+ gRegionMap->scrollX += gRegionMap->unk6A;
+ sub_80FB238(gRegionMap->scrollX, gRegionMap->scrollY);
+ gRegionMap->unk6C++;
+ if (gRegionMap->unk6C == 8)
+ {
+ u16 r3 = (gRegionMap->scrollX + 44) / 8 + 1;
+ u16 r1 = (gRegionMap->scrollY + 52) / 8 + 2;
+
+ if (r3 != gRegionMap->unk64 || r1 != gRegionMap->unk66)
+ {
+ u16 mapSecId;
+
+ gRegionMap->unk64 = r3;
+ gRegionMap->unk66 = r1;
+ mapSecId = GetRegionMapSectionAt(r3, r1);
+ gRegionMap->unk16 = sub_80FB758(mapSecId);
+ if (mapSecId != gRegionMap->mapSecId)
+ {
+ gRegionMap->mapSecId = mapSecId;
+ GetMapSectionName(gRegionMap->mapSecName, gRegionMap->mapSecId, 16);
+ }
+ sub_80FBA18();
+ }
+ gRegionMap->unk6C = 0;
+ gRegionMap->inputCallback = sub_80FAD04;
+ return INPUT_EVENT_3;
+ }
+ return INPUT_EVENT_2;
+}
+
+void sub_80FAEC4(void)
+{
+ if (gRegionMap->zoomed == FALSE)
+ {
+ gRegionMap->scrollY = 0;
+ gRegionMap->scrollX = 0;
+ gRegionMap->unk40 = 0;
+ gRegionMap->unk3C = 0;
+ gRegionMap->unk60 = gRegionMap->cursorPosX * 8 - 52;
+ gRegionMap->unk62 = gRegionMap->cursorPosY * 8 - 68;
+ gRegionMap->unk44 = (gRegionMap->unk60 << 8) / 16;
+ gRegionMap->unk48 = (gRegionMap->unk62 << 8) / 16;
+ gRegionMap->unk64 = gRegionMap->cursorPosX;
+ gRegionMap->unk66 = gRegionMap->cursorPosY;
+ gRegionMap->unk4C = (256 << 8);
+ gRegionMap->unk50 = -0x800;
+ }
+ else
+ {
+ gRegionMap->unk3C = gRegionMap->scrollX * 256;
+ gRegionMap->unk40 = gRegionMap->scrollY * 256;
+ gRegionMap->unk60 = 0;
+ gRegionMap->unk62 = 0;
+ gRegionMap->unk44 = -(gRegionMap->unk3C / 16);
+ gRegionMap->unk48 = -(gRegionMap->unk40 / 16);
+ gRegionMap->cursorPosX = gRegionMap->unk64;
+ gRegionMap->cursorPosY = gRegionMap->unk66;
+ gRegionMap->unk4C = (128 << 8);
+ gRegionMap->unk50 = 0x800;
+ }
+ gRegionMap->unk6E = 0;
+ sub_80FBCA0();
+ sub_80FBDF8();
+}
+
+u8 sub_80FAFC0(void)
+{
+ u8 r4;
+
+ if (gRegionMap->unk6E >= 16)
+ return 0;
+ gRegionMap->unk6E++;
+ if (gRegionMap->unk6E == 16)
+ {
+ gRegionMap->unk44 = 0;
+ gRegionMap->unk48 = 0;
+ gRegionMap->scrollX = gRegionMap->unk60;
+ gRegionMap->scrollY = gRegionMap->unk62;
+ gRegionMap->unk4C = (gRegionMap->zoomed == FALSE) ? (128 << 8) : (256 << 8);
+ gRegionMap->zoomed = !gRegionMap->zoomed;
+ gRegionMap->inputCallback = (gRegionMap->zoomed == FALSE) ? sub_80FAB78 : sub_80FAD04;
+ CreateRegionMapCursor(gRegionMap->cursorTileTag, gRegionMap->cursorPaletteTag);
+ sub_80FBE24();
+ r4 = 0;
+ }
+ else
+ {
+ gRegionMap->unk3C += gRegionMap->unk44;
+ gRegionMap->unk40 += gRegionMap->unk48;
+ gRegionMap->scrollX = gRegionMap->unk3C >> 8;
+ gRegionMap->scrollY = gRegionMap->unk40 >> 8;
+ gRegionMap->unk4C += gRegionMap->unk50;
+ if ((gRegionMap->unk44 < 0 && gRegionMap->scrollX < gRegionMap->unk60)
+ || (gRegionMap->unk44 > 0 && gRegionMap->scrollX > gRegionMap->unk60))
+ {
+ gRegionMap->scrollX = gRegionMap->unk60;
+ gRegionMap->unk44 = 0;
+ }
+ if ((gRegionMap->unk48 < 0 && gRegionMap->scrollY < gRegionMap->unk62)
+ || (gRegionMap->unk48 > 0 && gRegionMap->scrollY > gRegionMap->unk62))
+ {
+ gRegionMap->scrollY = gRegionMap->unk62;
+ gRegionMap->unk48 = 0;
+ }
+ if (gRegionMap->zoomed == FALSE)
+ {
+ if (gRegionMap->unk4C < (128 << 8))
+ {
+ gRegionMap->unk4C = (128 << 8);
+ gRegionMap->unk50 = 0;
+ }
+ }
+ else
+ {
+ if (gRegionMap->unk4C > (256 << 8))
+ {
+ gRegionMap->unk4C = (256 << 8);
+ gRegionMap->unk50 = 0;
+ }
+ }
+ r4 = 1;
+ }
+ CalcZoomScrollParams(gRegionMap->scrollX, gRegionMap->scrollY, 0x38, 0x48, gRegionMap->unk4C >> 8, gRegionMap->unk4C >> 8, 0);
+ return r4;
+}
+
+static void CalcZoomScrollParams(s16 a, s16 b, s16 c, s16 d, u16 e, u16 f, u8 rotation)
+{
+ s32 var1;
+ s32 var2;
+ s32 var3;
+ s32 var4;
+
+ gRegionMap->unk2C = e * gSineTable[rotation + 64] >> 8;
+ gRegionMap->unk30 = e * -gSineTable[rotation] >> 8;
+ gRegionMap->unk34 = f * gSineTable[rotation] >> 8;
+ gRegionMap->unk38 = f * gSineTable[rotation + 64] >> 8;
+
+ var1 = (a << 8) + (c << 8);
+ var2 = d * gRegionMap->unk34 + gRegionMap->unk2C * c;
+ gRegionMap->bg2x = var1 - var2;
+
+ var3 = (b << 8) + (d << 8);
+ var4 = gRegionMap->unk38 * d + gRegionMap->unk30 * c;
+ gRegionMap->bg2y = var3 - var4;
+
+ gRegionMap->needUpdateVideoRegs = TRUE;
+}
+
+static void sub_80FB238(s16 x, s16 y)
+{
+ gRegionMap->bg2x = (0x1C << 8) + (x << 8);
+ gRegionMap->bg2y = (0x24 << 8) + (y << 8);
+ gRegionMap->needUpdateVideoRegs = TRUE;
+}
+
+void UpdateRegionMapVideoRegs(void)
+{
+ if (gRegionMap->needUpdateVideoRegs)
+ {
+ REG_BG2PA = gRegionMap->unk2C;
+ REG_BG2PB = gRegionMap->unk34;
+ REG_BG2PC = gRegionMap->unk30;
+ REG_BG2PD = gRegionMap->unk38;
+ REG_BG2X = gRegionMap->bg2x;
+ REG_BG2Y = gRegionMap->bg2y;
+ gRegionMap->needUpdateVideoRegs = FALSE;
+ }
+}
+
+void sub_80FB2A4(s16 a, s16 b)
+{
+ CalcZoomScrollParams(a, b, 0x38, 0x48, 0x100, 0x100, 0);
+ UpdateRegionMapVideoRegs();
+ if (gRegionMap->playerIconSprite != NULL)
+ {
+ gRegionMap->playerIconSprite->pos2.x = -a;
+ gRegionMap->playerIconSprite->pos2.y = -b;
+ }
+}
+
+static u16 GetRegionMapSectionAt(u16 x, u16 y)
+{
+ if (y < MAPCURSOR_Y_MIN || y > MAPCURSOR_Y_MAX || x < MAPCURSOR_X_MIN || x > MAPCURSOR_X_MAX)
+ return MAPSEC_NONE;
+ y -= MAPCURSOR_Y_MIN;
+ x -= MAPCURSOR_X_MIN;
+ return sRegionMapLayout[x + y * 28];
+}
+
+static void InitializeCursorPosition(void)
+{
+ struct MapHeader *mapHeader;
+ u16 mapWidth;
+ u16 mapHeight;
+ u16 x;
+ u16 y;
+ u16 r1;
+ u16 r9;
+
+ if (gSaveBlock1.location.mapGroup == 25
+ && (gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_CORRIDOR
+ || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_LOWER_DECK
+ || gSaveBlock1.location.mapNum == MAP_ID_SS_TIDAL_ROOMS))
+ {
+ sub_80FB600();
+ return;
+ }
+
+ switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1)
+ {
+ default:
+ case 0:
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
+ gRegionMap->playerIsInCave = FALSE;
+ mapWidth = gMapHeader.mapData->width;
+ mapHeight = gMapHeader.mapData->height;
+ x = gSaveBlock1.pos.x;
+ y = gSaveBlock1.pos.y;
+ if (gRegionMap->mapSecId == MAPSEC_UNDERWATER6)
+ gRegionMap->playerIsInCave = TRUE;
+ break;
+ case 3:
+ case 6:
+ mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum);
+ gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->playerIsInCave = TRUE;
+ mapWidth = mapHeader->mapData->width;
+ mapHeight = mapHeader->mapData->height;
+ x = gSaveBlock1.warp4.x;
+ y = gSaveBlock1.warp4.y;
+ break;
+ case 8:
+ mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum);
+ gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ gRegionMap->playerIsInCave = TRUE;
+ mapWidth = mapHeader->mapData->width;
+ mapHeight = mapHeader->mapData->height;
+ x = gSaveBlock1.warp2.x;
+ y = gSaveBlock1.warp2.y;
+ break;
+ case 7:
+ {
+ struct WarpData *r4;
+
+ gRegionMap->mapSecId = gMapHeader.regionMapSectionId;
+ if (gRegionMap->mapSecId != MAPSEC_UNK_0x57)
+ {
+ r4 = &gSaveBlock1.warp4;
+ mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum);
+ }
+ else
+ {
+ r4 = &gSaveBlock1.warp2;
+ mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum);
+ gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ }
+ gRegionMap->playerIsInCave = FALSE;
+ mapWidth = mapHeader->mapData->width;
+ mapHeight = mapHeader->mapData->height;
+ x = r4->x;
+ y = r4->y;
+ }
+ break;
+ }
+
+ r9 = x;
+
+ r1 = mapWidth / gRegionMapLocations[gRegionMap->mapSecId].width;
+ if (r1 == 0)
+ r1 = 1;
+ x /= r1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
+ x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+
+ r1 = mapHeight / gRegionMapLocations[gRegionMap->mapSecId].height;
+ if (r1 == 0)
+ r1 = 1;
+ y /= r1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
+ y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+
+ switch (gRegionMap->mapSecId)
+ {
+ case MAPSEC_ROUTE_114:
+ if (y != 0)
+ x = 0;
+ break;
+ case MAPSEC_ROUTE_126:
+ case MAPSEC_UNDERWATER2:
+ x = 0;
+ if (gSaveBlock1.pos.x > 32)
+ x = 1;
+ if (gSaveBlock1.pos.x > 0x33)
+ x++;
+ y = 0;
+ if (gSaveBlock1.pos.y > 0x25)
+ y = 1;
+ if (gSaveBlock1.pos.y > 0x38)
+ y++;
+ break;
+ case MAPSEC_ROUTE_121:
+ x = 0;
+ if (r9 > 14)
+ x = 1;
+ if (r9 > 0x1C)
+ x++;
+ if (r9 > 0x36)
+ x++;
+ break;
+ }
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+}
+
+static void sub_80FB600(void)
+{
+ u16 y = 0;
+ u16 x = 0;
+ u8 mapGroup;
+ u8 mapNum;
+ s16 sp2;
+ s16 sp4;
+
+ switch (GetSSTidalLocation(&mapGroup, &mapNum, &sp2, &sp4))
+ {
+ case 1:
+ gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY;
+ break;
+ case 2:
+ gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY;
+ break;
+ case 3:
+ gRegionMap->mapSecId = MAPSEC_ROUTE_124;
+ break;
+ case 4:
+ gRegionMap->mapSecId = MAPSEC_ROUTE_131;
+ break;
+ default:
+ case 0:
+ {
+ struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ u16 r1;
+
+ gRegionMap->mapSecId = mapHeader->regionMapSectionId;
+ r1 = mapHeader->mapData->width / gRegionMapLocations[gRegionMap->mapSecId].width;
+ if (r1 == 0)
+ r1 = 1;
+ x = sp2 / r1;
+ if (x >= gRegionMapLocations[gRegionMap->mapSecId].width)
+ x = gRegionMapLocations[gRegionMap->mapSecId].width - 1;
+
+ r1 = mapHeader->mapData->height / gRegionMapLocations[gRegionMap->mapSecId].height;
+ if (r1 == 0)
+ r1 = 1;
+ y = sp4 / r1;
+ if (y >= gRegionMapLocations[gRegionMap->mapSecId].height)
+ y = gRegionMapLocations[gRegionMap->mapSecId].height - 1;
+ }
+ break;
+ }
+ gRegionMap->playerIsInCave = FALSE;
+ gRegionMap->cursorPosX = gRegionMapLocations[gRegionMap->mapSecId].x + x + MAPCURSOR_X_MIN;
+ gRegionMap->cursorPosY = gRegionMapLocations[gRegionMap->mapSecId].y + y + MAPCURSOR_Y_MIN;
+}
+
+static u16 sub_80FB758(u16 mapSecId)
+{
+ switch (mapSecId)
+ {
+ case MAPSEC_NONE:
+ return 0;
+ case MAPSEC_LITTLEROOT_TOWN:
+ return FlagGet(FLAG_VISITED_LITTLEROOT_TOWN) ? 2 : 3;
+ case MAPSEC_OLDALE_TOWN:
+ return FlagGet(FLAG_VISITED_OLDALE_TOWN) ? 2 : 3;
+ case MAPSEC_DEWFORD_TOWN:
+ return FlagGet(FLAG_VISITED_DEWFORD_TOWN) ? 2 : 3;
+ case MAPSEC_LAVARIDGE_TOWN:
+ return FlagGet(FLAG_VISITED_LAVARIDGE_TOWN) ? 2 : 3;
+ case MAPSEC_FALLARBOR_TOWN:
+ return FlagGet(FLAG_VISITED_FALLARBOR_TOWN) ? 2 : 3;
+ case MAPSEC_VERDANTURF_TOWN:
+ return FlagGet(FLAG_VISITED_VERDANTURF_TOWN) ? 2 : 3;
+ case MAPSEC_PACIFIDLOG_TOWN:
+ return FlagGet(FLAG_VISITED_PACIFIDLOG_TOWN) ? 2 : 3;
+ case MAPSEC_PETALBURG_CITY:
+ return FlagGet(FLAG_VISITED_PETALBURG_CITY) ? 2 : 3;
+ case MAPSEC_SLATEPORT_CITY:
+ return FlagGet(FLAG_VISITED_SLATEPORT_CITY) ? 2 : 3;
+ case MAPSEC_MAUVILLE_CITY:
+ return FlagGet(FLAG_VISITED_MAUVILLE_CITY) ? 2 : 3;
+ case MAPSEC_RUSTBORO_CITY:
+ return FlagGet(FLAG_VISITED_RUSTBORO_CITY) ? 2 : 3;
+ case MAPSEC_FORTREE_CITY:
+ return FlagGet(FLAG_VISITED_FORTREE_CITY) ? 2 : 3;
+ case MAPSEC_LILYCOVE_CITY:
+ return FlagGet(FLAG_VISITED_LILYCOVE_CITY) ? 2 : 3;
+ case MAPSEC_MOSSDEEP_CITY:
+ return FlagGet(FLAG_VISITED_MOSSDEEP_CITY) ? 2 : 3;
+ case MAPSEC_SOOTOPOLIS_CITY:
+ return FlagGet(FLAG_VISITED_SOOTOPOLIS_CITY) ? 2 : 3;
+ case MAPSEC_EVER_GRANDE_CITY:
+ return FlagGet(FLAG_VISITED_EVER_GRANDE_CITY) ? 2 : 3;
+
+ case MAPSEC_BATTLE_TOWER:
+ return FlagGet(FLAG_UNLOCK_BATTLE_TOWER) ? 4 : 0;
+ case MAPSEC_SOUTHERN_ISLAND:
+ return FlagGet(FLAG_UNLOCK_SOUTHERN_ISLAND) ? 1 : 0;
+ default:
+ return 1;
+ }
+}
+
+u16 GetRegionMapSectionAt_(u16 x, u16 y)
+{
+ return GetRegionMapSectionAt(x, y);
+}
+
+static u16 sub_80FB9C0(u16 mapSecId)
+{
+ u16 i;
+
+ for (i = 0; gUnknown_083E7684[i][0] != MAPSEC_NONE; i++)
+ {
+ if (gUnknown_083E7684[i][0] == mapSecId)
+ return gUnknown_083E7684[i][1];
+ }
+ return mapSecId;
+}
+
+u16 sub_80FBA04(u16 mapSecId)
+{
+ return sub_80FB9C0(mapSecId);
+}
+
+static void sub_80FBA18(void)
+{
+ u16 x;
+ u16 y;
+ u16 i;
+
+ if (gRegionMap->mapSecId == MAPSEC_NONE)
+ {
+ gRegionMap->everGrandeCityArea = 0;
+ return;
+ }
+
+ if (gRegionMap->zoomed == FALSE)
+ {
+ x = gRegionMap->cursorPosX;
+ y = gRegionMap->cursorPosY;
+ }
+ else
+ {
+ x = gRegionMap->unk64;
+ y = gRegionMap->unk66;
+ }
+
+ i = 0;
+ while (1)
+ {
+ if (x <= 1)
+ {
+ if (sub_80FBAA0(y))
+ {
+ y--;
+ x = 0x1D;
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ x--;
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ i++;
+ }
+ }
+
+ gRegionMap->everGrandeCityArea = i;
+}
+
+static bool8 sub_80FBAA0(u16 a)
+{
+ u16 x;
+ u16 y;
+
+ y = a - 1;
+ if (y == 0xFFFF)
+ return FALSE;
+
+ for (x = MAPCURSOR_X_MIN; x <= MAPCURSOR_X_MAX; x++)
+ {
+ if (GetRegionMapSectionAt(x, y) == gRegionMap->mapSecId)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static const struct OamData sCursorOamData =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sCursorAnimSeq0[] =
+{
+ ANIMCMD_FRAME(0, 20),
+ ANIMCMD_FRAME(4, 20),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sCursorAnimSeq1[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_FRAME(32, 10),
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sCursorAnimTable[] =
+{
+ sCursorAnimSeq0,
+ sCursorAnimSeq1,
+};
+
+static void SpriteCB_Cursor(struct Sprite *sprite)
+{
+ if (gRegionMap->unk7A != 0)
+ {
+ sprite->pos1.x += gRegionMap->cursorDeltaX * 2;
+ sprite->pos1.y += gRegionMap->cursorDeltaY * 2;
+ gRegionMap->unk7A--;
+ }
+}
+
+static void nullsub_66(struct Sprite *sprite)
+{
+}
+
+void CreateRegionMapCursor(u16 tileTag, u16 paletteTag)
+{
+ u8 spriteId;
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette =
+ {
+ .data = sRegionMapCursor_Pal,
+ };
+ struct SpriteTemplate spriteTemplate =
+ {
+ .oam = &sCursorOamData,
+ .anims = sCursorAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_Cursor,
+ };
+
+ spriteSheet.tag = tileTag;
+ spriteTemplate.tileTag = tileTag;
+ gRegionMap->cursorTileTag = tileTag;
+
+ spritePalette.tag = paletteTag;
+ spriteTemplate.paletteTag = paletteTag;
+ gRegionMap->cursorPaletteTag = paletteTag;
+
+ if (gRegionMap->zoomed == FALSE)
+ {
+ spriteSheet.data = gRegionMap->cursorSmallImage;
+ spriteSheet.size = 0x100;
+ spriteTemplate.callback = SpriteCB_Cursor;
+ }
+ else
+ {
+ spriteSheet.data = gRegionMap->cursorLargeImage;
+ spriteSheet.size = 0x600;
+ spriteTemplate.callback = nullsub_66;
+ }
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&spritePalette);
+ spriteId = CreateSprite(&spriteTemplate, 0x38, 0x48, 0);
+ if (spriteId != 64)
+ {
+ gRegionMap->cursorSprite = &gSprites[spriteId];
+ if (gRegionMap->zoomed == TRUE)
+ {
+ gRegionMap->cursorSprite->oam.size = 2;
+ gRegionMap->cursorSprite->pos1.x -= 8;
+ gRegionMap->cursorSprite->pos1.y -= 8;
+ StartSpriteAnim(gRegionMap->cursorSprite, 1);
+ }
+ else
+ {
+ gRegionMap->cursorSprite->oam.size = 1;
+ gRegionMap->cursorSprite->pos1.x = gRegionMap->cursorPosX * 8 + 4;
+ gRegionMap->cursorSprite->pos1.y = gRegionMap->cursorPosY * 8 + 4;
+ }
+ gRegionMap->cursorSprite->data1 = 2;
+ gRegionMap->cursorSprite->data2 = IndexOfSpritePaletteTag(paletteTag) * 16 + 0x0101;
+ gRegionMap->cursorSprite->data3 = 1;
+ }
+}
+
+static void sub_80FBCA0(void)
+{
+ if (gRegionMap->cursorSprite != NULL)
+ {
+ DestroySprite(gRegionMap->cursorSprite);
+ FreeSpriteTilesByTag(gRegionMap->cursorTileTag);
+ FreeSpritePaletteByTag(gRegionMap->cursorPaletteTag);
+ }
+}
+
+void unref_sub_80FBCD0(void)
+{
+ gRegionMap->cursorSprite->data3 = 1;
+}
+
+void unref_sub_80FBCE0(void)
+{
+ gRegionMap->cursorSprite->data3 = 0;
+}
+
+static const struct OamData sPlayerIconOamData =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sPlayerIconAnimSeq0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sPlayerIconAnimTable[] =
+{
+ sPlayerIconAnimSeq0,
+};
+
+void CreateRegionMapPlayerIcon(u16 tileTag, u16 paletteTag)
+{
+ u8 spriteId;
+ struct SpriteSheet playerIconSpriteSheet =
+ {
+ .data = sRegionMapBrendanIcon_Image,
+ .size = 128,
+ .tag = tileTag,
+ };
+ struct SpritePalette playerIconSpritePalette =
+ {
+ .data = sRegionMapBrendanIcon_Pal,
+ .tag = paletteTag,
+ };
+ struct SpriteTemplate playerIconSpriteTemplate =
+ {
+ .tileTag = tileTag,
+ .paletteTag = paletteTag,
+ .oam = &sPlayerIconOamData,
+ .anims = sPlayerIconAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+
+ if (gSaveBlock2.playerGender == FEMALE)
+ {
+ playerIconSpriteSheet.data = sRegionMapMayIcon_Image;
+ playerIconSpritePalette.data = sRegionMapMayIcon_Pal;
+ }
+ LoadSpriteSheet(&playerIconSpriteSheet);
+ LoadSpritePalette(&playerIconSpritePalette);
+ spriteId = CreateSprite(&playerIconSpriteTemplate, 0, 0, 1);
+ gRegionMap->playerIconSprite = &gSprites[spriteId];
+ if (gRegionMap->zoomed == FALSE)
+ {
+ gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4;
+ gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4;
+ gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut;
+ }
+ else
+ {
+ gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48;
+ gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66;
+ gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn;
+ }
+}
+
+static void sub_80FBDF8(void)
+{
+ if (gRegionMap->playerIconSprite != NULL)
+ {
+ gRegionMap->playerIconSprite->invisible = TRUE;
+ gRegionMap->playerIconSprite->callback = SpriteCallbackDummy;
+ }
+}
+
+static void sub_80FBE24(void)
+{
+ if (gRegionMap->playerIconSprite != NULL)
+ {
+ if (gRegionMap->zoomed == TRUE)
+ {
+ gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 16 - 48;
+ gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 16 - 66;
+ gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedIn;
+ gRegionMap->playerIconSprite->invisible = FALSE;
+ }
+ else
+ {
+ gRegionMap->playerIconSprite->pos1.x = gRegionMap->unk74 * 8 + 4;
+ gRegionMap->playerIconSprite->pos1.y = gRegionMap->unk76 * 8 + 4;
+ gRegionMap->playerIconSprite->pos2.x = 0;
+ gRegionMap->playerIconSprite->pos2.y = 0;
+ gRegionMap->playerIconSprite->callback = SpriteCB_PlayerIconZoomedOut;
+ gRegionMap->playerIconSprite->invisible = FALSE;
+ }
+ }
+}
+
+static void SpriteCB_PlayerIconZoomedIn(struct Sprite *sprite)
+{
+ sprite->pos2.x = -(gRegionMap->scrollX * 2);
+ sprite->pos2.y = -(gRegionMap->scrollY * 2);
+ sprite->data0 = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
+ sprite->data1 = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
+
+ // Determine if sprite is on screen
+ if (sprite->data0 < -8 || sprite->data0 > 0xA8 || sprite->data1 < -8 || sprite->data1 > 0xF8)
+ sprite->data2 = FALSE;
+ else
+ sprite->data2 = TRUE;
+
+ if (sprite->data2 == TRUE)
+ UpdateIconBlink(sprite);
+ else
+ sprite->invisible = TRUE;
+}
+
+static void SpriteCB_PlayerIconZoomedOut(struct Sprite *sprite)
+{
+ UpdateIconBlink(sprite);
+}
+
+static void UpdateIconBlink(struct Sprite *sprite)
+{
+ if (gRegionMap->blinkPlayerIcon)
+ {
+ // Toggle visibility every 16 frames
+ sprite->data7++;
+ if (sprite->data7 > 16)
+ {
+ sprite->data7 = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ }
+}
+
+void sub_80FBF94(void)
+{
+ if (gRegionMap->playerIsInCave)
+ gRegionMap->blinkPlayerIcon = TRUE;
+}
+
+const u8 *GetMapSectionName(u8 *dest, u16 mapSecId, u16 length)
+{
+ if (mapSecId == MAPSEC_SECRET_BASE)
+ return GetSecretBaseMapName(dest);
+ if (mapSecId < MAPSEC_NONE)
+ return StringCopy(dest, gRegionMapLocations[mapSecId].regionMapSectionId);
+ if (length == 0)
+ length = 18;
+ return StringFill(dest, CHAR_SPACE, length);
+}
+
+const u8 *CopyMapName(u8 *dest, u16 mapSecId)
+{
+ switch (mapSecId)
+ {
+ case MAPSEC_UNK_0x57:
+ return StringCopy(dest, gOtherText_Ferry);
+ case MAPSEC_SECRET_BASE:
+ return StringCopy(dest, gOtherText_SecretBase);
+ default:
+ return GetMapSectionName(dest, mapSecId, 0);
+ }
+}
+
+const u8 *CopyLocationName(u8 *dest, u16 mapSecId)
+{
+ if (mapSecId == MAPSEC_EVIL_TEAM_HIDEOUT)
+ return StringCopy(dest, gOtherText_Hideout);
+ else
+ return CopyMapName(dest, mapSecId);
+}
+
+static void GetRegionMapLocationPosition(u16 mapSecId, u16 *x, u16 *y, u16 *width, u16 *height)
+{
+ *x = gRegionMapLocations[mapSecId].x;
+ *y = gRegionMapLocations[mapSecId].y;
+ *width = gRegionMapLocations[mapSecId].width;
+ *height = gRegionMapLocations[mapSecId].height;
+}
+
+struct UnknownStruct3
+{
+ void (*unk0)(void);
+ u16 unk4;
+ u16 unk6;
+ struct RegionMap regionMap;
+};
+
+extern u8 ewram[];
+#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0))
+#define ewram888 (ewram + 0x888)
+#define ewramA6E (ewram[0xA6E])
+#define ewramBlankMapName (ewram + 0xA48)
+
+static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal");
+static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz");
+static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz");
+static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal");
+static const u8 sFlyTargetIcons_ImageLZ[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz");
+
+static const u8 sUnknown_083E7920[][3] =
+{
+ {0, 9, 1},
+ {0, 10, 14},
+ {0, 11, 15},
+ {0, 12, 16},
+ {0, 13, 17},
+ {0, 14, 18},
+ {0, 15, 19},
+ {0, 0, 3},
+ {0, 1, 4},
+ {0, 2, 5},
+ {0, 3, 6},
+ {0, 4, 7},
+ {0, 5, 8},
+ {0, 6, 9},
+ {0, 7, 10},
+ {0, 8, 11},
+ {0, 16, 0},
+ {0, 17, 0},
+ {0, 18, 0},
+ {0, 19, 0},
+ {0, 20, 0},
+ {0, 21, 0},
+ {0, 22, 0},
+ {0, 23, 0},
+ {0, 24, 0},
+ {0, 25, 0},
+ {0, 26, 0},
+ {0, 27, 0},
+ {0, 28, 0},
+ {0, 29, 0},
+ {0, 30, 0},
+ {0, 31, 0},
+ {0, 32, 0},
+ {0, 33, 0},
+ {0, 34, 0},
+ {0, 35, 0},
+ {0, 36, 0},
+ {0, 37, 0},
+ {0, 38, 0},
+ {0, 39, 0},
+ {0, 40, 0},
+ {0, 41, 0},
+ {0, 42, 0},
+ {0, 43, 0},
+ {0, 44, 0},
+ {0, 45, 0},
+ {0, 46, 0},
+ {0, 47, 0},
+ {0, 48, 0},
+ {0, 49, 0},
+};
+
+struct UnknownStruct4
+{
+ const u8 *const *unk0;
+ u16 mapSecId;
+ u16 flag;
+};
+
+static const u8 *const sEverGrandeCityAreaNames[] = {OtherText_PokeLeague, OtherText_PokeCenter};
+
+static const struct UnknownStruct4 sUnknown_083E79C0[1] =
+{
+ {sEverGrandeCityAreaNames, MAPSEC_EVER_GRANDE_CITY, SYS_POKEMON_LEAGUE_FLY},
+};
+
+// XXX: what is this?
+static u8 *const ewram_ = ewram;
+
+static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2};
+
+// Fly targets that are not cities or towns
+static const u16 sSpecialFlyAreas[][2] =
+{
+ // flag, mapSecId
+ {0x848, MAPSEC_BATTLE_TOWER},
+ {0xFFFF, MAPSEC_NONE},
+};
+
+static const struct OamData sFlyTargetOamData =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq1[] =
+{
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq2[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq3[] =
+{
+ ANIMCMD_FRAME(5, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq4[] =
+{
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq5[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sFlyTargetAnimSeq6[] =
+{
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sFlyTargetAnimTable[] =
+{
+ sFlyTargetAnimSeq0,
+ sFlyTargetAnimSeq1,
+ sFlyTargetAnimSeq2,
+ sFlyTargetAnimSeq3,
+ sFlyTargetAnimSeq4,
+ sFlyTargetAnimSeq5,
+ sFlyTargetAnimSeq6,
+};
+
+static const struct SpriteTemplate gFlyTargetSpriteTemplate =
+{
+ .tileTag = 2,
+ .paletteTag = 2,
+ .oam = &sFlyTargetOamData,
+ .anims = sFlyTargetAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+void CB2_InitFlyRegionMap(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ REG_BG1HOFS = 0;
+ REG_BG1VOFS = 0;
+ REG_BG2VOFS = 0;
+ REG_BG2HOFS = 0;
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 0;
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeSpriteTileRanges();
+ FreeAllSpritePalettes();
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E7224);
+ break;
+ case 2:
+ InitMenuWindow(&gWindowConfig_81E7224);
+ MenuZeroFillScreen();
+ break;
+ case 3:
+ InitRegionMap(&ewram0.regionMap, 0);
+ CreateRegionMapCursor(0, 0);
+ CreateRegionMapPlayerIcon(1, 1);
+ ewram0.unk6 = ewram0.regionMap.mapSecId;
+ StringFill(ewramBlankMapName, CHAR_SPACE, 12);
+ PrintFlyTargetName();
+ break;
+ case 4:
+ LZ77UnCompVram(sFlyRegionMapFrame_ImageLZ, (void *)(VRAM + 0xC000));
+ break;
+ case 5:
+ LZ77UnCompVram(sFlyRegionMapFrame_TilemapLZ, (void *)(VRAM + 0xF000));
+ break;
+ case 6:
+ LoadPalette(sFlyRegionMapFrame_Pal, 16, 32);
+ MenuPrint_PixelCoords(gOtherText_FlyToWhere, 1, 0x90, 1);
+ break;
+ case 7:
+ CreateFlyTargetGraphics();
+ break;
+ case 8:
+ BlendPalettes(0xFFFFFFFF, 16, 0);
+ SetVBlankCallback(VBlankCB_FlyRegionMap);
+ break;
+ case 9:
+ REG_BLDCNT = 0;
+ REG_BG1CNT = 0x1E0D;
+ REG_DISPCNT = 0x1741;
+ sub_80FC244(sub_80FC5B4);
+ SetMainCallback2(CB2_FlyRegionMap);
+ break;
+ default:
+ return;
+ }
+ gMain.state++;
+}
+
+static void VBlankCB_FlyRegionMap(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void CB2_FlyRegionMap(void)
+{
+ ewram0.unk0();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+static void sub_80FC244(void (*func)(void))
+{
+ ewram0.unk0 = func;
+ ewram0.unk4 = 0;
+}
+
+static void PrintFlyTargetName(void)
+{
+ if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4)
+ {
+ u16 i = 0;
+ int zero;
+
+ for (i = 0; i < ARRAY_COUNT(sUnknown_083E79C0); i++)
+ {
+ const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i];
+
+ if (ewram0.regionMap.mapSecId == r4->mapSecId)
+ {
+ if (FlagGet(r4->flag))
+ {
+ MenuDrawTextWindow(16, 14, 29, 19);
+ MenuPrint(ewram0.regionMap.mapSecName, 17, 15);
+ MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17);
+ return;
+ }
+ break;
+ }
+ }
+ // This check is always true, but somehow the compiler still performed it.
+ asm("mov %0, #0\n":"=r"(zero)); // zero = 0
+ if (zero == 0)
+ {
+ MenuDrawTextWindow(16, 16, 29, 19);
+ MenuPrint(ewram0.regionMap.mapSecName, 17, 17);
+ MenuZeroFillWindowRect(16, 14, 29, 15);
+ }
+ }
+ else
+ {
+ MenuDrawTextWindow(16, 16, 29, 19);
+ MenuPrint(ewramBlankMapName, 17, 17);
+ MenuZeroFillWindowRect(16, 14, 29, 15);
+ }
+}
+
+static void CreateFlyTargetGraphics(void)
+{
+ struct SpriteSheet spriteSheet;
+
+ LZ77UnCompWram(sFlyTargetIcons_ImageLZ, ewram888);
+ spriteSheet.data = ewram888;
+ spriteSheet.size = 0x1C0;
+ spriteSheet.tag = 2;
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&sFlyTargetIconSpritePalette);
+ CreateCityTownFlyTargetIcons();
+ CreateSpecialAreaFlyTargetIcons();
+}
+
+// Draws a light overlay on cities and towns that the player can fly to
+static void CreateCityTownFlyTargetIcons(void)
+{
+ u16 canFlyFlag = 0x80F;
+ u16 i;
+
+ for (i = 0; i < 16; i++)
+ {
+ u16 x;
+ u16 y;
+ u16 width;
+ u16 height;
+ u16 r7;
+ u8 spriteId;
+
+ GetRegionMapLocationPosition(i, &x, &y, &width, &height);
+ x = (x + 1) * 8 + 4;
+ y = (y + 2) * 8 + 4;
+ if (width == 2)
+ r7 = 1;
+ else if (height == 2)
+ r7 = 2;
+ else
+ r7 = 0;
+ spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10);
+ if (spriteId != 64)
+ {
+ gSprites[spriteId].oam.shape = r7;
+ if (FlagGet(canFlyFlag))
+ gSprites[spriteId].callback = SpriteCB_FlyTargetIcons;
+ else
+ r7 += 3;
+ StartSpriteAnim(&gSprites[spriteId], r7);
+ gSprites[spriteId].data0 = i;
+ }
+ canFlyFlag++;
+ }
+}
+
+// Draws a red box on other fly targets
+// The Battle Tower is the only one of these
+static void CreateSpecialAreaFlyTargetIcons(void)
+{
+ u16 i;
+
+ for (i = 0; sSpecialFlyAreas[i][1] != MAPSEC_NONE; i++)
+ {
+ u16 x;
+ u16 y;
+ u16 width;
+ u16 height;
+
+ if (FlagGet(sSpecialFlyAreas[i][0]))
+ {
+ u16 mapSecId = sSpecialFlyAreas[i][1];
+ u8 spriteId;
+
+ GetRegionMapLocationPosition(mapSecId, &x, &y, &width, &height);
+ x = (x + 1) * 8;
+ y = (y + 2) * 8;
+ spriteId = CreateSprite(&gFlyTargetSpriteTemplate, x, y, 10);
+ if (spriteId != 64)
+ {
+ gSprites[spriteId].oam.size = 1;
+ gSprites[spriteId].callback = SpriteCB_FlyTargetIcons;
+ StartSpriteAnim(&gSprites[spriteId], 6);
+ gSprites[spriteId].data0 = mapSecId;
+ }
+ }
+ }
+}
+
+static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)
+{
+ // Blink if our mapSecId is the one selected on the map
+ if (ewram0.regionMap.mapSecId == sprite->data0)
+ {
+ // Toggle visibility every 16 frames
+ sprite->data1++;
+ if (sprite->data1 > 16)
+ {
+ sprite->data1 = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ }
+ else
+ {
+ sprite->data1 = 16;
+ sprite->invisible = FALSE;
+ }
+}
+
+static void sub_80FC5B4(void)
+{
+ switch (ewram0.unk4)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ ewram0.unk4++;
+ break;
+ case 1:
+ if (UpdatePaletteFade() != 0)
+ break;
+ sub_80FC244(sub_80FC600);
+ break;
+ }
+}
+
+static void sub_80FC600(void)
+{
+ if (ewram0.unk4 == 0)
+ {
+ switch (sub_80FAB60())
+ {
+ case INPUT_EVENT_NONE:
+ case INPUT_EVENT_DPAD:
+ case INPUT_EVENT_2:
+ break;
+ case INPUT_EVENT_3:
+ PrintFlyTargetName();
+ break;
+ case INPUT_EVENT_A_BUTTON:
+ if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4)
+ {
+ m4aSongNumStart(SE_SELECT);
+ ewramA6E = 1;
+ sub_80FC244(sub_80FC69C);
+ }
+ break;
+ case INPUT_EVENT_B_BUTTON:
+ m4aSongNumStart(SE_SELECT);
+ ewramA6E = 0;
+ sub_80FC244(sub_80FC69C);
+ break;
+ }
+ }
+}
+
+static void sub_80FC69C(void)
+{
+ switch (ewram0.unk4)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ ewram0.unk4++;
+ break;
+ case 1:
+ if (UpdatePaletteFade() != 0)
+ break;
+ FreeRegionMapIconResources();
+ if (ewramA6E != 0)
+ {
+ switch (ewram0.regionMap.mapSecId)
+ {
+ case MAPSEC_SOUTHERN_ISLAND:
+ sub_8053538(22);
+ break;
+ case MAPSEC_BATTLE_TOWER:
+ sub_8053538(21);
+ break;
+ case MAPSEC_LITTLEROOT_TOWN:
+ sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13);
+ break;
+ case MAPSEC_EVER_GRANDE_CITY:
+ sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11);
+ break;
+ default:
+ if (sUnknown_083E7920[ewram0.regionMap.mapSecId][2] != 0)
+ sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSecId][2]);
+ else
+ warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSecId][0], sUnknown_083E7920[ewram0.regionMap.mapSecId][1], -1);
+ break;
+ }
+ sub_80865BC();
+ }
+ else
+ {
+ SetMainCallback2(sub_808AD58);
+ }
+ break;
+ }
+}
diff --git a/src/rom4.c b/src/rom4.c
index bfc8e0e44..b2e30e292 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -993,12 +993,12 @@ bool8 is_light_level_8_or_9(u8 a1)
u8 unref_sub_8054260(void)
{
- return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->name;
+ return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId;
}
u8 sav1_map_get_name(void)
{
- return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->name;
+ return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId;
}
u8 sav1_map_get_battletype(void)
diff --git a/src/save_menu_util.c b/src/save_menu_util.c
index b2dd662d6..a2d17bd36 100644
--- a/src/save_menu_util.c
+++ b/src/save_menu_util.c
@@ -70,7 +70,7 @@ void PrintSaveMapName(s16 x, s16 y)
{
char name[32];
- CopyMapName(name, gMapHeader.name);
+ CopyMapName(name, gMapHeader.regionMapSectionId);
MenuPrint(name, x, y);
}
diff --git a/src/secret_base.c b/src/secret_base.c
index d88d2c66a..4e8331f5c 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -205,7 +205,7 @@ void sub_80BB8CC(void)
memset(gSaveBlock1.secretBases[0].sbr_field_2, 0xFF, 7);
StringCopyN(gSaveBlock1.secretBases[0].sbr_field_2, gSaveBlock2.playerName, nameLength);
gSaveBlock1.secretBases[0].gender = gSaveBlock2.playerGender;
- VarSet(VAR_SECRET_BASE_MAP, gMapHeader.name);
+ VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId);
}
void sub_80BB970(struct MapEvents *events)
diff --git a/src/tv.c b/src/tv.c
index 7be33fc4f..8b99fc2fa 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -365,7 +365,7 @@ void sub_80BDC14(void)
gSaveBlock1.gabbyAndTyData.valB_2 = gSaveBlock1.gabbyAndTyData.valA_2;
gSaveBlock1.gabbyAndTyData.valB_3 = gSaveBlock1.gabbyAndTyData.valA_3;
gSaveBlock1.gabbyAndTyData.valA_4 = 1;
- gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.name;
+ gSaveBlock1.gabbyAndTyData.mapnum = gMapHeader.regionMapSectionId;
IncrementGameStat(GAME_STAT_GOT_INTERVIEWED);
}
@@ -556,7 +556,7 @@ void sub_80BE028(void)
worldOfMasters->var02++;
worldOfMasters->var04 = gBattleResults.CaughtPoke;
worldOfMasters->var08 = gBattleResults.Poke1Species;
- worldOfMasters->var0a = gMapHeader.name;
+ worldOfMasters->var0a = gMapHeader.regionMapSectionId;
}
void sub_80BE074(void)
@@ -585,7 +585,7 @@ void sub_80BE074(void)
pokemonTodayFailed->species2 = gBattleResults.LastOpponentSpecies;
pokemonTodayFailed->var10 = total;
pokemonTodayFailed->var11 = gBattleOutcome;
- pokemonTodayFailed->var12 = gMapHeader.name;
+ pokemonTodayFailed->var12 = gMapHeader.regionMapSectionId;
StringCopy(pokemonTodayFailed->playerName, gSaveBlock2.playerName);
sub_80BE138((TVShow *)pokemonTodayFailed);
pokemonTodayFailed->language = GAME_LANGUAGE;
@@ -710,7 +710,7 @@ void sub_80BE3BC(void)
smartShopper->var00 = TVSHOW_SMART_SHOPPER;
smartShopper->var01 = rval;
- smartShopper->shopLocation = gMapHeader.name;
+ smartShopper->shopLocation = gMapHeader.regionMapSectionId;
for (i=0; i<3; i++)
{
smartShopper->itemIds[i] = gUnknown_02038724[i].item_id;
@@ -2720,7 +2720,7 @@ void DoTVShowTodaysSmartShopper(void)
{
case 0:
TVShowConvertInternationalString(gStringVar1, smartShopper->playerName, smartShopper->language);
- sub_80FBFB4(gStringVar2, smartShopper->shopLocation, 0);
+ GetMapSectionName(gStringVar2, smartShopper->shopLocation, 0);
if (smartShopper->itemAmounts[0] >= 0xff)
gUnknown_020387E8 = 11;
else
@@ -2978,7 +2978,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
break;
case 1:
TVShowConvertInternationalString(gStringVar1, pokemonTodayFailed->playerName, pokemonTodayFailed->language);
- sub_80FBFB4(gStringVar2, pokemonTodayFailed->var12, 0);
+ GetMapSectionName(gStringVar2, pokemonTodayFailed->var12, 0);
StringCopy(gStringVar3, gSpeciesNames[pokemonTodayFailed->species2]);
if (pokemonTodayFailed->var11 == 1)
gUnknown_020387E8 = 3;
@@ -3133,7 +3133,7 @@ void DoTVShowPokemonNewsMassOutbreak(void)
{
struct TVShowMassOutbreak *massOutbreak = &gSaveBlock1.tvShows[gSpecialVar_0x8004].massOutbreak;
- sub_80FBFB4(gStringVar1, massOutbreak->locationMapNum, 0);
+ GetMapSectionName(gStringVar1, massOutbreak->locationMapNum, 0);
StringCopy(gStringVar2, gSpeciesNames[massOutbreak->species]);
TVShowDone();
StartMassOutbreak();
@@ -3149,7 +3149,7 @@ void DoTVShowInSearchOfTrainers(void)
switch (state)
{
case 0:
- sub_80FBFB4(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0);
+ GetMapSectionName(gStringVar1, gSaveBlock1.gabbyAndTyData.mapnum, 0);
if (gSaveBlock1.gabbyAndTyData.battleNum > 1)
gUnknown_020387E8 = 1;
else
@@ -3246,7 +3246,7 @@ void DoTVShowTheWorldOfMasters(void)
case 2:
TVShowConvertInternationalString(gStringVar1, worldOfMasters->playerName,
worldOfMasters->language);
- sub_80FBFB4(gStringVar2, worldOfMasters->var0a, 0);
+ GetMapSectionName(gStringVar2, worldOfMasters->var0a, 0);
StringCopy(gStringVar3, gSpeciesNames[worldOfMasters->var04]);
TVShowDone();
break;
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 0adf8f19b..b38be22d8 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -755,7 +755,7 @@ gUnknown_020388BC: @ 20388BC
.include "src/menu_helpers.o"
.align 2
-gUnknown_020388CC: @ 20388CC
+gRegionMap: @ 20388CC
.space 0x4
gUnknown_020388D0: @ 20388D0