diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2019-11-11 21:46:57 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2019-11-11 21:46:57 -0500 |
commit | 734cbfdb202f366ed39b5304e030478aaa3ea090 (patch) | |
tree | 54b3c92ced32331a50c27cb710f8a4624fc9cdc6 | |
parent | f316b22f96753c8580d86a8b7957ec69d7bd0c3c (diff) |
Decomp map_name_popup
-rw-r--r-- | asm/item_menu.s | 2 | ||||
-rw-r--r-- | asm/map_name_popup.s | 490 | ||||
-rw-r--r-- | asm/overworld.s | 10 | ||||
-rw-r--r-- | baserom.ips | bin | 398952 -> 398518 bytes | |||
-rw-r--r-- | data/item_use.s | 15 | ||||
-rw-r--r-- | data/map_name_popup.s | 10 | ||||
-rw-r--r-- | include/global.fieldmap.h | 2 | ||||
-rw-r--r-- | include/map_name_popup.h | 2 | ||||
-rw-r--r-- | include/strings.h | 3 | ||||
-rw-r--r-- | include/text_window.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 6 | ||||
-rw-r--r-- | src/item_use.c | 63 | ||||
-rw-r--r-- | src/map_name_popup.c | 216 | ||||
-rw-r--r-- | src/quest_log.c | 2 |
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 Binary files differindex d11c55170..c7c4f9714 100644 --- a/baserom.ips +++ b/baserom.ips 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){}; |