summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2019-11-11 21:46:57 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2019-11-11 21:46:57 -0500
commit734cbfdb202f366ed39b5304e030478aaa3ea090 (patch)
tree54b3c92ced32331a50c27cb710f8a4624fc9cdc6
parentf316b22f96753c8580d86a8b7957ec69d7bd0c3c (diff)
Decomp map_name_popup
-rw-r--r--asm/item_menu.s2
-rw-r--r--asm/map_name_popup.s490
-rw-r--r--asm/overworld.s10
-rw-r--r--baserom.ipsbin398952 -> 398518 bytes
-rw-r--r--data/item_use.s15
-rw-r--r--data/map_name_popup.s10
-rw-r--r--include/global.fieldmap.h2
-rw-r--r--include/map_name_popup.h2
-rw-r--r--include/strings.h3
-rw-r--r--include/text_window.h1
-rw-r--r--ld_script.txt6
-rw-r--r--src/item_use.c63
-rw-r--r--src/map_name_popup.c216
-rw-r--r--src/quest_log.c2
14 files changed, 294 insertions, 528 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index a143d2776..a8487864a 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5826,7 +5826,7 @@ UseRegisteredKeyItemOnField: @ 810AD10
movs r0, 0
b _0810ADA0
_0810AD1E:
- bl sub_80982EC
+ bl DismissMapNamePopup
movs r0, 0
movs r1, 0
movs r2, 0
diff --git a/asm/map_name_popup.s b/asm/map_name_popup.s
deleted file mode 100644
index ba64bdbe8..000000000
--- a/asm/map_name_popup.s
+++ /dev/null
@@ -1,490 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8098110
-sub_8098110: @ 8098110
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r0, 0x80
- lsls r0, 7
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080981A2
- ldr r0, _08098178 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080981A2
- ldr r5, _0809817C @ =sub_80981AC
- adds r0, r5, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFF
- bne _08098188
- adds r0, r5, 0
- movs r1, 0x5A
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- ldr r1, _08098180 @ =0xffffef7f
- movs r0, 0
- movs r2, 0
- bl ChangeBgY
- ldr r1, _08098184 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
- strh r1, [r0, 0xC]
- strh r6, [r0, 0x18]
- b _080981A2
- .align 2, 0
-_08098178: .4byte gUnknown_203ADFA
-_0809817C: .4byte sub_80981AC
-_08098180: .4byte 0xffffef7f
-_08098184: .4byte gTasks
-_08098188:
- ldr r0, _080981A8 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0x4
- beq _0809819E
- movs r0, 0x4
- strh r0, [r1, 0x8]
-_0809819E:
- movs r0, 0x1
- strh r0, [r1, 0xE]
-_080981A2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080981A8: .4byte gTasks
- thumb_func_end sub_8098110
-
- thumb_func_start sub_80981AC
-sub_80981AC: @ 80981AC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, _080981D0 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- bls _080981C6
- b _080982DE
-_080981C6:
- lsls r0, 2
- ldr r1, _080981D4 @ =_080981D8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080981D0: .4byte gTasks
-_080981D4: .4byte _080981D8
- .align 2, 0
-_080981D8:
- .4byte _080981FC
- .4byte _0809820E
- .4byte _08098218
- .4byte _08098234
- .4byte _0809824C
- .4byte _080982DE
- .4byte _0809827E
- .4byte _080982A6
- .4byte _080982D6
-_080981FC:
- movs r1, 0x18
- ldrsh r0, [r4, r1]
- bl sub_8098340
- strh r0, [r4, 0x10]
- movs r0, 0x1
- strh r0, [r4, 0x12]
- strh r0, [r4, 0x8]
- b _080982DE
-_0809820E:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _080982DE
-_08098218:
- ldrh r0, [r4, 0xC]
- subs r0, 0x2
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x18
- negs r1, r1
- cmp r0, r1
- bgt _080982DE
- movs r0, 0x3
- strh r0, [r4, 0x8]
- movs r0, 0
- strh r0, [r4, 0xA]
- b _080982DE
-_08098234:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- ble _080982DE
- movs r0, 0
- strh r0, [r4, 0xA]
- movs r0, 0x4
- strh r0, [r4, 0x8]
- b _080982DE
-_0809824C:
- ldrh r0, [r4, 0xC]
- adds r0, 0x2
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- blt _080982DE
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08098278
- ldrh r0, [r4, 0x10]
- bl sub_8098400
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- strh r0, [r4, 0xE]
- b _080982DE
-_08098278:
- movs r0, 0x6
- strh r0, [r4, 0x8]
- b _080982E6
-_0809827E:
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080982A0
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080982A0
- ldrb r0, [r4, 0x10]
- bl rbox_fill_rectangle
- ldrb r0, [r4, 0x10]
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x1
- strh r0, [r4, 0x14]
-_080982A0:
- movs r0, 0x7
- strh r0, [r4, 0x8]
- b _080982E6
-_080982A6:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080982E6
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080982C6
- ldrb r0, [r4, 0x10]
- bl RemoveWindow
- strh r5, [r4, 0x12]
- movs r0, 0x1
- strh r0, [r4, 0x16]
-_080982C6:
- movs r0, 0x8
- strh r0, [r4, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- b _080982E6
-_080982D6:
- adds r0, r2, 0
- bl DestroyTask
- b _080982E6
-_080982DE:
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
-_080982E6:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80981AC
-
- thumb_func_start sub_80982EC
-sub_80982EC: @ 80982EC
- push {lr}
- ldr r0, _08098318 @ =sub_80981AC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _08098312
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- ldr r1, _0809831C @ =gTasks+0x8
- adds r1, r0, r1
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x5
- bgt _08098312
- movs r0, 0x6
- strh r0, [r1]
-_08098312:
- pop {r0}
- bx r0
- .align 2, 0
-_08098318: .4byte sub_80981AC
-_0809831C: .4byte gTasks+0x8
- thumb_func_end sub_80982EC
-
- thumb_func_start sub_8098320
-sub_8098320: @ 8098320
- push {lr}
- ldr r0, _0809833C @ =sub_80981AC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xFF
- eors r0, r1
- negs r1, r0
- orrs r1, r0
- lsrs r1, 31
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0809833C: .4byte sub_80981AC
- thumb_func_end sub_8098320
-
- thumb_func_start sub_8098340
-sub_8098340: @ 8098340
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r0, _08098378 @ =gUnknown_83D4164
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- movs r6, 0x1D
- ldr r0, _0809837C @ =gMapHeader
- ldrb r0, [r0, 0x1A]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08098396
- cmp r0, 0x7F
- beq _08098384
- ldr r2, [sp]
- lsrs r1, r2, 24
- adds r1, 0x5
- lsls r1, 24
- ldr r0, _08098380 @ =0x00ffffff
- ands r0, r2
- orrs r0, r1
- str r0, [sp]
- movs r6, 0x27
- b _08098396
- .align 2, 0
-_08098378: .4byte gUnknown_83D4164
-_0809837C: .4byte gMapHeader
-_08098380: .4byte 0x00ffffff
-_08098384:
- ldr r2, [sp]
- lsrs r1, r2, 24
- adds r1, 0x8
- lsls r1, 24
- ldr r0, _080983B4 @ =0x00ffffff
- ands r0, r2
- orrs r0, r1
- str r0, [sp]
- movs r6, 0x2D
-_08098396:
- mov r0, sp
- bl AddWindow
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r4, 0
- beq _080983B8
- movs r0, 0x3
- bl stdpal_get
- movs r1, 0xD0
- movs r2, 0x20
- bl LoadPalette
- b _080983C6
- .align 2, 0
-_080983B4: .4byte 0x00ffffff
-_080983B8:
- movs r0, 0x3
- bl stdpal_get
- ldr r1, _080983FC @ =gPlttBufferUnfaded + 0x1A0
- movs r2, 0x10
- bl CpuSet
-_080983C6:
- lsls r4, r5, 24
- lsrs r4, 24
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_814FF6C
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0xD
- bl DrawTextBorderOuter
- adds r0, r4, 0
- bl PutWindowTilemap
- adds r0, r5, 0
- bl sub_8098400
- adds r0, r4, 0
- movs r1, 0x3
- bl CopyWindowToVram
- adds r0, r5, 0
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080983FC: .4byte gPlttBufferUnfaded + 0x1A0
- thumb_func_end sub_8098340
-
- thumb_func_start sub_8098400
-sub_8098400: @ 8098400
- push {r4-r6,lr}
- sub sp, 0x28
- lsls r0, 16
- lsrs r6, r0, 16
- movs r5, 0x70
- ldr r4, _08098478 @ =gMapHeader
- ldrb r1, [r4, 0x14]
- add r0, sp, 0xC
- movs r2, 0
- bl GetMapName
- adds r2, r0, 0
- movs r0, 0x1A
- ldrsb r0, [r4, r0]
- cmp r0, 0
- beq _08098434
- adds r1, r0, 0
- adds r0, r2, 0
- bl sub_809847C
- movs r0, 0x1A
- ldrsb r0, [r4, r0]
- movs r5, 0xB0
- cmp r0, 0x7F
- beq _08098434
- movs r5, 0x98
-_08098434:
- movs r2, 0x1
- negs r2, r2
- movs r0, 0x2
- add r1, sp, 0xC
- bl GetStringWidth
- adds r4, r0, 0
- subs r4, r5, r4
- lsrs r4, 1
- lsls r5, r6, 24
- lsrs r5, 24
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r5, 0
- movs r1, 0x2
- add r2, sp, 0xC
- adds r3, r4, 0
- bl AddTextPrinterParameterized
- add sp, 0x28
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08098478: .4byte gMapHeader
- thumb_func_end sub_8098400
-
- thumb_func_start sub_809847C
-sub_809847C: @ 809847C
- push {lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r3, r1, 24
- asrs r1, 24
- cmp r1, 0
- beq _080984D2
- movs r0, 0
- strb r0, [r2]
- adds r2, 0x1
- cmp r1, 0x7F
- bne _080984A4
- ldr r1, _080984A0 @ =gUnknown_841D18D
- adds r0, r2, 0
- bl StringCopy
- b _080984D2
- .align 2, 0
-_080984A0: .4byte gUnknown_841D18D
-_080984A4:
- cmp r1, 0
- bge _080984B4
- movs r0, 0xBC
- strb r0, [r2]
- adds r2, 0x1
- negs r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
-_080984B4:
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r2, 0
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r2, r0, 0
- adds r1, r2, 0
- movs r0, 0xC0
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0xFF
- strb r0, [r1, 0x1]
- adds r0, r2, 0
-_080984D2:
- pop {r1}
- bx r1
- thumb_func_end sub_809847C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 9b9fe037f..28bcd8ecb 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1747,7 +1747,7 @@ _080558D4:
cmp r0, r1
beq _08055914
movs r0, 0x1
- bl sub_8098110
+ bl CreateMapNamePopupIfNotAlreadyRunning
_08055914:
add sp, 0x4
pop {r4,r5}
@@ -3282,7 +3282,7 @@ sub_805644C: @ 805644C
bl sub_81127F8
_0805649E:
bl ScriptContext2_Enable
- bl sub_80982EC
+ bl DismissMapNamePopup
b _080564BA
.align 2, 0
_080564A8: .4byte gUnknown_3005E88
@@ -3323,7 +3323,7 @@ sub_80564C8: @ 80564C8
cmp r0, 0x1
bne _0805650C
bl ScriptContext2_Enable
- bl sub_80982EC
+ bl DismissMapNamePopup
b _08056522
.align 2, 0
_08056508: .4byte gUnknown_3005E90
@@ -3824,7 +3824,7 @@ sub_8056918: @ 8056918
cmp r0, 0x4
bne _0805692C
movs r0, 0
- bl sub_8098110
+ bl CreateMapNamePopupIfNotAlreadyRunning
_0805692C:
bl sub_807DF7C
pop {r0}
@@ -4223,7 +4223,7 @@ _08056CA8:
cmp r0, 0x4
bne _08056CCA
movs r0, 0
- bl sub_8098110
+ bl CreateMapNamePopupIfNotAlreadyRunning
b _08056CCA
.align 2, 0
_08056CBC: .4byte gMapHeader
diff --git a/baserom.ips b/baserom.ips
index d11c55170..c7c4f9714 100644
--- a/baserom.ips
+++ b/baserom.ips
Binary files differ
diff --git a/data/item_use.s b/data/item_use.s
deleted file mode 100644
index aa78ac919..000000000
--- a/data/item_use.s
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
- .incbin "baserom.gba", 0x3E27B4, 0x1A0
-
-gUnknown_83E2954:: @ 83E2954
- .4byte sub_8124C8C
- .4byte CB2_ReturnToField
- .4byte NULL
- .4byte NULL
diff --git a/data/map_name_popup.s b/data/map_name_popup.s
deleted file mode 100644
index 6509df895..000000000
--- a/data/map_name_popup.s
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83D4164:: @ 83D4164
- .incbin "baserom.gba", 0x3D4164, 0x8
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index c0f25fa93..70e806266 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -163,7 +163,7 @@ struct MapHeader
/* 0x17 */ u8 mapType;
/* 0x18 */ u8 filler_18;
/* 0x19 */ u8 escapeRope;
- /* 0x1A */ u8 flags;
+ /* 0x1A */ s8 flags;
/* 0x1B */ u8 battleType;
};
diff --git a/include/map_name_popup.h b/include/map_name_popup.h
index cf9b005d9..6f4a6528c 100644
--- a/include/map_name_popup.h
+++ b/include/map_name_popup.h
@@ -9,6 +9,6 @@
// Exported ROM declarations
void HideMapNamePopUpWindow(void);
-void sub_8098110(u8);
+void CreateMapNamePopupIfNotAlreadyRunning(u8);
#endif //GUARD_MAP_NAME_POPUP_H
diff --git a/include/strings.h b/include/strings.h
index 983caf509..6ad76e2fa 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -738,4 +738,7 @@ extern const u8 gText_GiveUpTryingToTeachNewMove[];
// pokemon_size_record
extern const u8 gText_DecimalPoint[];
+// map_name_popup
+extern const u8 gUnknown_841D18D[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text_window.h b/include/text_window.h
index c1463a9c7..8e8466145 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -29,5 +29,6 @@ void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette);
void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset);
void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx);
void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx);
+void sub_814FF6C(u8 windowId, u16 destOffset);
#endif // GUARD_TEXT_WINDOW_H
diff --git a/ld_script.txt b/ld_script.txt
index d40c88c0a..856155aa8 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -136,7 +136,7 @@ SECTIONS {
asm/script_movement.o(.text);
asm/fldeff_cut.o(.text);
src/mail_data.o(.text);
- asm/map_name_popup.o(.text);
+ src/map_name_popup.o(.text);
src/item_menu_icons.o(.text);
src/battle_anim_mon_movement.o(.text);
src/item.o(.text);
@@ -438,7 +438,7 @@ SECTIONS {
data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata);
- data/map_name_popup.o(.rodata);
+ src/map_name_popup.o(.rodata);
src/item_menu_icons.o(.rodata);
src/battle_anim_mon_movement.o(.rodata);
src/item.o(.rodata);
@@ -447,7 +447,7 @@ SECTIONS {
src/script_menu.o(.rodata);
data/naming_screen.o(.rodata);
src/pokemon_size_record.o(.rodata);
- data/item_use.o(.rodata);
+ src/item_use.o(.rodata);
data/battle_anim_effects_misc.o(.rodata);
src/flying.o(.rodata);
src/psychic.o(.rodata);
diff --git a/src/item_use.c b/src/item_use.c
index 873ce4ab4..db0475370 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -76,7 +76,68 @@ void sub_80A1D68(u8 taskId);
void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId);
void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId);
-extern void (*const gUnknown_83E2954[])(void);
+// No clue what this is
+static const u8 sUnref_83E27B4[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x00, 0xe0, 0x03, 0x00, 0x7c,
+ 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+void (*const gUnknown_83E2954[])(void) = {
+ sub_8124C8C,
+ CB2_ReturnToField,
+ NULL,
+ NULL
+};
void sub_80A0FBC(u8 taskId)
{
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
new file mode 100644
index 000000000..361c3a931
--- /dev/null
+++ b/src/map_name_popup.c
@@ -0,0 +1,216 @@
+#include "global.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "window.h"
+#include "palette.h"
+#include "task.h"
+#include "event_data.h"
+#include "text_window.h"
+#include "quest_log.h"
+#include "region_map.h"
+#include "text.h"
+#include "strings.h"
+#include "string_util.h"
+#include "constants/flags.h"
+
+static void Task_MapNamePopup(u8 taskId);
+static u16 MapNamePopupCreateWindow(int a0);
+static void MapNamePopupPrintMapNameOnWindow(u16 a0);
+static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags);
+
+void CreateMapNamePopupIfNotAlreadyRunning(int a0)
+{
+ u8 taskId;
+ if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE && !(gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3))
+ {
+ taskId = FindTaskIdByFunc(Task_MapNamePopup);
+ if (taskId == 0xFF)
+ {
+ taskId = CreateTask(Task_MapNamePopup, 90);
+ ChangeBgX(0, 0x00000000, 0);
+ ChangeBgY(0, 0xFFFFEF7F, 0);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[8] = a0;
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] != 4)
+ gTasks[taskId].data[0] = 4;
+ gTasks[taskId].data[3] = 1;
+ }
+ }
+}
+
+static void Task_MapNamePopup(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[4] = MapNamePopupCreateWindow(task->data[8]);
+ task->data[5] = 1;
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ break;
+ // fallthrough
+ case 2:
+ task->data[2] -= 2;
+ if (task->data[2] <= -24)
+ {
+ task->data[0] = 3;
+ task->data[1] = 0;
+ }
+ break;
+ case 3:
+ task->data[1]++;
+ if (task->data[1] > 120)
+ {
+ task->data[1] = 0;
+ task->data[0] = 4;
+ }
+ break;
+ case 4:
+ task->data[2] += 2;
+ if (task->data[2] >= 0)
+ {
+ if (task->data[3])
+ {
+ MapNamePopupPrintMapNameOnWindow(task->data[4]);
+ CopyWindowToVram(task->data[4], 2);
+ task->data[0] = 1;
+ task->data[3] = 0;
+ }
+ else
+ {
+ task->data[0] = 6;
+ return;
+ }
+ }
+ case 5:
+ break;
+ case 6:
+ if (task->data[5] && !task->data[6])
+ {
+ rbox_fill_rectangle(task->data[4]);
+ CopyWindowToVram(task->data[4], 1);
+ task->data[6] = 1;
+ }
+ task->data[0] = 7;
+ return;
+ case 7:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ if (task->data[5])
+ {
+ RemoveWindow(task->data[4]);
+ task->data[5] = 0;
+ task->data[7] = 1;
+ }
+ task->data[0] = 8;
+ ChangeBgY(0, 0x00000000, 0);
+ }
+ return;
+ case 8:
+ DestroyTask(taskId);
+ return;
+ }
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+}
+
+void DismissMapNamePopup(void)
+{
+ u8 taskId;
+ s16 *data;
+ taskId = FindTaskIdByFunc(Task_MapNamePopup);
+ if (taskId != 0xFF)
+ {
+ data = gTasks[taskId].data;
+ if (data[0] < 6)
+ data[0] = 6;
+ }
+}
+
+bool32 IsMapNamePopupTaskActive(void)
+{
+ return FindTaskIdByFunc(Task_MapNamePopup) != 0xFF ? TRUE : FALSE;
+}
+
+static u16 MapNamePopupCreateWindow(int a0)
+{
+ struct WindowTemplate windowTemplate = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 29,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 0xD,
+ .baseBlock = 0x001
+ };
+ u16 windowId;
+ u16 r6 = 0x01D;
+ if (gMapHeader.flags)
+ {
+ if (gMapHeader.flags != 0x7F)
+ {
+ windowTemplate.width += 5;
+ r6 = 0x027;
+ }
+ else
+ {
+ windowTemplate.width += 8;
+ r6 = 0x02D;
+ }
+ }
+ windowId = AddWindow(&windowTemplate);
+ if (a0)
+ {
+ LoadPalette(stdpal_get(3), 0xd0, 0x20);
+ }
+ else
+ {
+ CpuCopy16(stdpal_get(3), &gPlttBufferUnfaded[0xd0], 0x20);
+ }
+ sub_814FF6C(windowId, r6);
+ DrawTextBorderOuter(windowId, r6, 0xD);
+ PutWindowTilemap(windowId);
+ MapNamePopupPrintMapNameOnWindow(windowId);
+ CopyWindowToVram(windowId, 3);
+ return windowId;
+}
+
+static void MapNamePopupPrintMapNameOnWindow(u16 windowId)
+{
+ u8 mapName[25];
+ u32 maxWidth = 112;
+ u32 xpos;
+ u8 *ptr = GetMapName(mapName, gMapHeader.regionMapSectionId, 0);
+ if (gMapHeader.flags)
+ {
+ ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.flags);
+ maxWidth = gMapHeader.flags != 0x7F ? 152 : 176;
+ }
+ xpos = (maxWidth - GetStringWidth(2, mapName, -1)) / 2;
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ AddTextPrinterParameterized(windowId, 2, mapName, xpos, 2, 0xFF, NULL);
+}
+
+static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags)
+{
+ if (flags == 0)
+ return dest;
+ *dest++ = CHAR_SPACE;
+ if (flags == 0x7F)
+ return StringCopy(dest, gUnknown_841D18D);
+ if (flags < 0)
+ {
+ *dest++ = CHAR_B;
+ flags *= -1;
+ }
+ dest = ConvertIntToDecimalStringN(dest, flags, STR_CONV_MODE_LEFT_ALIGN, 2);
+ *dest++ = CHAR_F;
+ *dest = EOS;
+ return dest;
+}
diff --git a/src/quest_log.c b/src/quest_log.c
index 64d3df076..2675d3a4f 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -1425,7 +1425,7 @@ static void sub_81120AC(u8 taskId)
break;
default:
if (gUnknown_203AE94.unk_0_6 == 1)
- sub_8098110(1);
+ CreateMapNamePopupIfNotAlreadyRunning(1);
CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400);
Free(gUnknown_203AE90);
gUnknown_203AE94 = (struct UnkStruct_203AE94){};