diff --git a/graphics/interface/map_popup_palette.pal b/graphics/interface/map_popup_palette.pal new file mode 100644 index 0000000000..696191f6ba --- /dev/null +++ b/graphics/interface/map_popup_palette.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +255 255 255 +41 49 90 +0 0 0 +238 230 238 +189 180 197 +139 139 164 +90 90 123 +41 49 90 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/interface/map_popup_tiles.png b/graphics/interface/map_popup_tiles.png new file mode 100644 index 0000000000..546c4a420c Binary files /dev/null and b/graphics/interface/map_popup_tiles.png differ diff --git a/graphics/map_popup/brick.png b/graphics/map_popup/brick.png deleted file mode 100644 index 8fef0a1c2d..0000000000 Binary files a/graphics/map_popup/brick.png and /dev/null differ diff --git a/graphics/map_popup/brick_outline.png b/graphics/map_popup/brick_outline.png deleted file mode 100644 index be4b6f95a3..0000000000 Binary files a/graphics/map_popup/brick_outline.png and /dev/null differ diff --git a/graphics/map_popup/marble.png b/graphics/map_popup/marble.png deleted file mode 100644 index d79b9ec347..0000000000 Binary files a/graphics/map_popup/marble.png and /dev/null differ diff --git a/graphics/map_popup/marble_outline.png b/graphics/map_popup/marble_outline.png deleted file mode 100644 index 54f3021ea5..0000000000 Binary files a/graphics/map_popup/marble_outline.png and /dev/null differ diff --git a/graphics/map_popup/stone.png b/graphics/map_popup/stone.png deleted file mode 100644 index fe3b7e29d6..0000000000 Binary files a/graphics/map_popup/stone.png and /dev/null differ diff --git a/graphics/map_popup/stone2.png b/graphics/map_popup/stone2.png deleted file mode 100644 index 261c3184ab..0000000000 Binary files a/graphics/map_popup/stone2.png and /dev/null differ diff --git a/graphics/map_popup/stone2_outline.png b/graphics/map_popup/stone2_outline.png deleted file mode 100644 index b0c0748df7..0000000000 Binary files a/graphics/map_popup/stone2_outline.png and /dev/null differ diff --git a/graphics/map_popup/stone_outline.png b/graphics/map_popup/stone_outline.png deleted file mode 100644 index 7c014d05eb..0000000000 Binary files a/graphics/map_popup/stone_outline.png and /dev/null differ diff --git a/graphics/map_popup/underwater.pal b/graphics/map_popup/underwater.pal deleted file mode 100644 index 19b8cf9c43..0000000000 --- a/graphics/map_popup/underwater.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -115 197 164 -0 0 0 -238 255 255 -65 65 123 -255 255 255 -180 222 255 -139 172 213 -98 123 172 -57 74 131 -16 24 90 -180 222 255 -139 172 213 -98 123 172 -57 74 131 -16 24 90 -255 255 255 diff --git a/graphics/map_popup/underwater.png b/graphics/map_popup/underwater.png deleted file mode 100644 index e6cf2b6c81..0000000000 Binary files a/graphics/map_popup/underwater.png and /dev/null differ diff --git a/graphics/map_popup/underwater_outline.png b/graphics/map_popup/underwater_outline.png deleted file mode 100644 index 2ffe3cb755..0000000000 Binary files a/graphics/map_popup/underwater_outline.png and /dev/null differ diff --git a/graphics/map_popup/wood.png b/graphics/map_popup/wood.png deleted file mode 100644 index e846a6bcd5..0000000000 Binary files a/graphics/map_popup/wood.png and /dev/null differ diff --git a/graphics/map_popup/wood_outline.png b/graphics/map_popup/wood_outline.png deleted file mode 100644 index d143dbc2f8..0000000000 Binary files a/graphics/map_popup/wood_outline.png and /dev/null differ diff --git a/include/graphics.h b/include/graphics.h index 9e2fb79539..da860030de 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -5070,4 +5070,8 @@ extern const u8 gMailTilemap_Retro[]; extern const u8 gMonMarkingsMenu_Gfx[]; extern const u16 gMonMarkingsMenu_Pal[]; +// BSBob map pop-ups +extern const u8 gPopUpWindowBorder_Tiles[]; +extern const u16 gPopUpWindowBorder_Palette[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/menu.h b/include/menu.h index 0b0a42423d..0b2d8611d5 100644 --- a/include/menu.h +++ b/include/menu.h @@ -41,6 +41,7 @@ struct MenuAction }; extern const u16 gStandardMenuPalette[]; +extern EWRAM_DATA u8 gPopupTaskId; void FreeAllOverworldWindowBuffers(void); void InitStandardTextBoxWindows(void); @@ -103,8 +104,8 @@ void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress); void RemoveStartMenuWindow(void); void DisplayYesNoMenuWithDefault(u8 initialCursorPos); void BufferSaveMenuText(u8 textId, u8 *dest, u8 color); -void RemoveMapNamePopUpWindow(void); -u8 GetMapNamePopUpWindowId(void); +void RemovePrimaryPopUpWindow(void); +u8 GetPrimaryPopUpWindowId(void); u8 AddMapNamePopUpWindow(void); void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing); void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette); @@ -124,5 +125,9 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP void EraseYesNoWindow(void); void PrintMenuActionTextsAtPos(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs); void Menu_LoadStdPal(void); +u8 AddWeatherPopUpWindow(void); +u8 GetSecondaryPopUpWindowId(void); +void RemoveSecondaryPopUpWindow(void); +void HBlankCB_DoublePopupWindow(void); #endif // GUARD_MENU_H diff --git a/include/rtc.h b/include/rtc.h index 7a3d3d524b..2865b3e617 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -45,5 +45,6 @@ void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds); void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2); u32 RtcGetMinuteCount(void); u32 RtcGetLocalDayCount(void); +void FormatDecimalTimeWithoutSeconds(u8 *dest, s8 hour, s8 minute, bool8 is24Hour); #endif // GUARD_RTC_UTIL_H diff --git a/include/strings.h b/include/strings.h index 3215f70c88..79548a189a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -3026,4 +3026,8 @@ extern const u8 gText_BoxName[]; extern const u8 gText_PkmnsNickname[]; extern const u8 gText_TellHimTheWords[]; +// BSBob map pop-ups +extern const u8 gText_AM[]; +extern const u8 gText_PM[]; + #endif // GUARD_STRINGS_H diff --git a/src/graphics.c b/src/graphics.c index 8f1bc89ea6..ec81bfebab 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1535,3 +1535,7 @@ static const u8 sUnused2[] = {0x02}; static const u8 sEmpty5[0x3242] = {0}; static const u8 sUnused3[] = {0x40}; static const u8 sEmpty6[0x13] = {0}; + +// BSBob map pop-ups +const u8 gPopUpWindowBorder_Tiles[] = INCBIN_U8("graphics/interface/map_popup_tiles.4bpp"); +const u16 gPopUpWindowBorder_Palette[] = INCBIN_U16("graphics/interface/map_popup_palette.gbapal"); diff --git a/src/map_name_popup.c b/src/map_name_popup.c index eed2f2b714..e1ec7f7adc 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -3,11 +3,14 @@ #include "bg.h" #include "event_data.h" #include "gpu_regs.h" +#include "graphics.h" #include "international_string_util.h" +#include "main.h" #include "menu.h" #include "map_name_popup.h" #include "palette.h" #include "region_map.h" +#include "rtc.h" #include "start_menu.h" #include "string_util.h" #include "task.h" @@ -17,165 +20,12 @@ #include "constants/region_map_sections.h" #include "constants/weather.h" -// enums -enum MapPopUp_Themes -{ - MAPPOPUP_THEME_WOOD, - MAPPOPUP_THEME_MARBLE, - MAPPOPUP_THEME_STONE, - MAPPOPUP_THEME_BRICK, - MAPPOPUP_THEME_UNDERWATER, - MAPPOPUP_THEME_STONE2, -}; - // static functions static void Task_MapNamePopUpWindow(u8 taskId); static void ShowMapNamePopUpWindow(void); -static void LoadMapNamePopUpWindowBg(void); +static void LoadMapNamePopUpWindowBgs(void); -// EWRAM -static EWRAM_DATA u8 sPopupTaskId = 0; - -// .rodata -static const u8 sMapPopUp_Table[][960] = -{ - [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood.4bpp"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble.4bpp"), - [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone.4bpp"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick.4bpp"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater.4bpp"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2.4bpp"), -}; - -static const u8 sMapPopUp_OutlineTable[][960] = -{ - [MAPPOPUP_THEME_WOOD] = INCBIN_U8("graphics/map_popup/wood_outline.4bpp"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U8("graphics/map_popup/marble_outline.4bpp"), - [MAPPOPUP_THEME_STONE] = INCBIN_U8("graphics/map_popup/stone_outline.4bpp"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U8("graphics/map_popup/brick_outline.4bpp"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U8("graphics/map_popup/underwater_outline.4bpp"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U8("graphics/map_popup/stone2_outline.4bpp"), -}; - -static const u16 sMapPopUp_PaletteTable[][16] = -{ - [MAPPOPUP_THEME_WOOD] = INCBIN_U16("graphics/map_popup/wood.gbapal"), - [MAPPOPUP_THEME_MARBLE] = INCBIN_U16("graphics/map_popup/marble_outline.gbapal"), - [MAPPOPUP_THEME_STONE] = INCBIN_U16("graphics/map_popup/stone_outline.gbapal"), - [MAPPOPUP_THEME_BRICK] = INCBIN_U16("graphics/map_popup/brick_outline.gbapal"), - [MAPPOPUP_THEME_UNDERWATER] = INCBIN_U16("graphics/map_popup/underwater_outline.gbapal"), - [MAPPOPUP_THEME_STONE2] = INCBIN_U16("graphics/map_popup/stone2_outline.gbapal"), -}; - -static const u16 sMapPopUp_Palette_Underwater[16] = INCBIN_U16("graphics/map_popup/underwater.gbapal"); - -static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] = -{ - [MAPSEC_LITTLEROOT_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_OLDALE_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_DEWFORD_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_LAVARIDGE_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_FALLARBOR_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_VERDANTURF_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_PACIFIDLOG_TOWN] = MAPPOPUP_THEME_WOOD, - [MAPSEC_PETALBURG_CITY] = MAPPOPUP_THEME_BRICK, - [MAPSEC_SLATEPORT_CITY] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_MAUVILLE_CITY] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_RUSTBORO_CITY] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_FORTREE_CITY] = MAPPOPUP_THEME_BRICK, - [MAPSEC_LILYCOVE_CITY] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_MOSSDEEP_CITY] = MAPPOPUP_THEME_BRICK, - [MAPSEC_SOOTOPOLIS_CITY] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_EVER_GRANDE_CITY] = MAPPOPUP_THEME_BRICK, - [MAPSEC_ROUTE_101] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_102] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_103] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_104] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_105] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_106] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_107] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_108] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_109] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_110] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_111] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_112] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_113] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_114] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_115] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_116] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_117] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_118] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_119] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_120] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_121] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_122] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_123] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ROUTE_124] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_125] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_126] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_127] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_128] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_129] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_130] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_131] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_132] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_133] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_ROUTE_134] = MAPPOPUP_THEME_UNDERWATER, - [MAPSEC_UNDERWATER_124] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_126] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_127] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_128] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_SOOTOPOLIS] = MAPPOPUP_THEME_STONE2, - [MAPSEC_GRANITE_CAVE] = MAPPOPUP_THEME_STONE, - [MAPSEC_MT_CHIMNEY] = MAPPOPUP_THEME_STONE, - [MAPSEC_SAFARI_ZONE] = MAPPOPUP_THEME_WOOD, - [MAPSEC_BATTLE_FRONTIER] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_PETALBURG_WOODS] = MAPPOPUP_THEME_WOOD, - [MAPSEC_RUSTURF_TUNNEL] = MAPPOPUP_THEME_STONE, - [MAPSEC_ABANDONED_SHIP] = MAPPOPUP_THEME_WOOD, - [MAPSEC_NEW_MAUVILLE] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_METEOR_FALLS] = MAPPOPUP_THEME_STONE, - [MAPSEC_METEOR_FALLS2] = MAPPOPUP_THEME_STONE, - [MAPSEC_MT_PYRE] = MAPPOPUP_THEME_STONE, - [MAPSEC_AQUA_HIDEOUT_OLD] = MAPPOPUP_THEME_STONE, - [MAPSEC_SHOAL_CAVE] = MAPPOPUP_THEME_STONE, - [MAPSEC_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE, - [MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_STONE2, - [MAPSEC_VICTORY_ROAD] = MAPPOPUP_THEME_STONE, - [MAPSEC_MIRAGE_ISLAND] = MAPPOPUP_THEME_WOOD, - [MAPSEC_CAVE_OF_ORIGIN] = MAPPOPUP_THEME_STONE, - [MAPSEC_SOUTHERN_ISLAND] = MAPPOPUP_THEME_WOOD, - [MAPSEC_FIERY_PATH] = MAPPOPUP_THEME_STONE, - [MAPSEC_FIERY_PATH2] = MAPPOPUP_THEME_STONE, - [MAPSEC_JAGGED_PASS] = MAPPOPUP_THEME_WOOD, - [MAPSEC_JAGGED_PASS2] = MAPPOPUP_THEME_WOOD, - [MAPSEC_SEALED_CHAMBER] = MAPPOPUP_THEME_STONE, - [MAPSEC_UNDERWATER_SEALED_CHAMBER] = MAPPOPUP_THEME_STONE2, - [MAPSEC_SCORCHED_SLAB] = MAPPOPUP_THEME_STONE, - [MAPSEC_ISLAND_CAVE] = MAPPOPUP_THEME_STONE, - [MAPSEC_DESERT_RUINS] = MAPPOPUP_THEME_STONE, - [MAPSEC_ANCIENT_TOMB] = MAPPOPUP_THEME_STONE, - [MAPSEC_INSIDE_OF_TRUCK] = MAPPOPUP_THEME_WOOD, - [MAPSEC_SKY_PILLAR] = MAPPOPUP_THEME_STONE, - [MAPSEC_SECRET_BASE] = MAPPOPUP_THEME_STONE, - [MAPSEC_DYNAMIC] = MAPPOPUP_THEME_MARBLE, - [MAPSEC_AQUA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_MAGMA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_MIRAGE_TOWER - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_BIRTH_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD, - [MAPSEC_FARAWAY_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_WOOD, - [MAPSEC_ARTISAN_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_UNDERWATER_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2, - [MAPSEC_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_UNDERWATER_105 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_125 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2, - [MAPSEC_UNDERWATER_129 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE2, - [MAPSEC_DESERT_UNDERPASS - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_ALTERING_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_NAVEL_ROCK - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_STONE, - [MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE -}; +static const u16 sMapPopUp_Palette[16] = INCBIN_U16("graphics/interface/map_popup_palette.gbapal"); static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1"); static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2"); @@ -216,7 +66,7 @@ enum { STATE_PRINT, // For some reason the first state is numerically last. }; -#define POPUP_OFFSCREEN_Y 40 +#define POPUP_OFFSCREEN_Y 24 #define POPUP_SLIDE_SPEED 2 #define tState data[0] @@ -232,18 +82,18 @@ void ShowMapNamePopup(void) if (!FuncIsActiveTask(Task_MapNamePopUpWindow)) { // New pop up window - sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90); - SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y); - gTasks[sPopupTaskId].tState = STATE_PRINT; - gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y; + gPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 100); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + gTasks[gPopupTaskId].tState = STATE_PRINT; + gTasks[gPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y; } else { // There's already a pop up window running. // Hurry the old pop up offscreen so the new one can appear. - if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT) - gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT; - gTasks[sPopupTaskId].tIncomingPopUp = TRUE; + if (gTasks[gPopupTaskId].tState != STATE_SLIDE_OUT) + gTasks[gPopupTaskId].tState = STATE_SLIDE_OUT; + gTasks[gPopupTaskId].tIncomingPopUp = TRUE; } } } @@ -261,6 +111,8 @@ static void Task_MapNamePopUpWindow(u8 taskId) task->tState = STATE_SLIDE_IN; task->tPrintTimer = 0; ShowMapNamePopUpWindow(); + EnableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(HBlankCB_DoublePopupWindow); } break; case STATE_SLIDE_IN: @@ -270,7 +122,7 @@ static void Task_MapNamePopUpWindow(u8 taskId) { task->tYOffset = 0; task->tState = STATE_WAIT; - gTasks[sPopupTaskId].data[1] = 0; + gTasks[gPopupTaskId].tOnscreenTimer = 0; } break; case STATE_WAIT: @@ -303,24 +155,31 @@ static void Task_MapNamePopUpWindow(u8 taskId) } break; case STATE_ERASE: - ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); + ClearStdWindowAndFrame(GetPrimaryPopUpWindowId(), TRUE); + ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE); task->tState = STATE_END; break; case STATE_END: HideMapNamePopUpWindow(); return; } - SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset); } void HideMapNamePopUpWindow(void) { if (FuncIsActiveTask(Task_MapNamePopUpWindow)) { - ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE); - RemoveMapNamePopUpWindow(); + ClearStdWindowAndFrame(GetPrimaryPopUpWindowId(), TRUE); + ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE); + RemovePrimaryPopUpWindow(); + RemoveSecondaryPopUpWindow(); + DisableInterrupts(INTR_FLAG_HBLANK); + SetHBlankCallback(NULL); SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0); - DestroyTask(sPopupTaskId); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 10)); + DestroyTask(gPopupTaskId); } } @@ -328,9 +187,22 @@ static void ShowMapNamePopUpWindow(void) { u8 mapDisplayHeader[24]; u8 *withoutPrefixPtr; - u8 x; + u8 mapNameX, timeX, mapNameY, timeY, mapNamePopUpWindowId, weatherPopUpWindowId; const u8 *mapDisplayHeaderSource; + mapNameX = 8; + mapNameY = 2; + timeX = 5; + timeY = 8; + + SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_CLR); + + mapNamePopUpWindowId = AddMapNamePopUpWindow(); + weatherPopUpWindowId = AddWeatherPopUpWindow(); + + LoadMapNamePopUpWindowBgs(); + LoadPalette(gPopUpWindowBorder_Palette, 0xE0, 32); + if (InBattlePyramid()) { if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP) @@ -350,52 +222,23 @@ static void ShowMapNamePopUpWindow(void) withoutPrefixPtr = &(mapDisplayHeader[3]); GetMapName(withoutPrefixPtr, gMapHeader.regionMapSectionId, 0); } - AddMapNamePopUpWindow(); - LoadMapNamePopUpWindowBg(); - x = GetStringCenterAlignXOffset(FONT_NARROW, withoutPrefixPtr, 80); + mapDisplayHeader[0] = EXT_CTRL_CODE_BEGIN; mapDisplayHeader[1] = EXT_CTRL_CODE_HIGHLIGHT; mapDisplayHeader[2] = TEXT_COLOR_TRANSPARENT; - AddTextPrinterParameterized(GetMapNamePopUpWindowId(), FONT_NARROW, mapDisplayHeader, x, 3, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(GetMapNamePopUpWindowId(), COPYWIN_FULL); + + AddTextPrinterParameterized(mapNamePopUpWindowId, FONT_SHORT, mapDisplayHeader, mapNameX, mapNameY, TEXT_SKIP_DRAW, NULL); + FormatDecimalTimeWithoutSeconds(withoutPrefixPtr, gLocalTime.hours, gLocalTime.minutes, FALSE); + AddTextPrinterParameterized(weatherPopUpWindowId, FONT_SMALL, mapDisplayHeader, GetStringRightAlignXOffset(FONT_SMALL, mapDisplayHeader, DISPLAY_WIDTH) - timeX, timeY, TEXT_SKIP_DRAW, NULL); + + CopyWindowToVram(mapNamePopUpWindowId, COPYWIN_FULL); + CopyWindowToVram(weatherPopUpWindowId, COPYWIN_FULL); } -#define TILE_TOP_EDGE_START 0x21D -#define TILE_TOP_EDGE_END 0x228 -#define TILE_LEFT_EDGE_TOP 0x229 -#define TILE_RIGHT_EDGE_TOP 0x22A -#define TILE_LEFT_EDGE_MID 0x22B -#define TILE_RIGHT_EDGE_MID 0x22C -#define TILE_LEFT_EDGE_BOT 0x22D -#define TILE_RIGHT_EDGE_BOT 0x22E -#define TILE_BOT_EDGE_START 0x22F -#define TILE_BOT_EDGE_END 0x23A - -static void DrawMapNamePopUpFrame(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused) +static void LoadMapNamePopUpWindowBgs(void) { - s32 i; - - // Draw top edge - for (i = 0; i < 1 + TILE_TOP_EDGE_END - TILE_TOP_EDGE_START; i++) - FillBgTilemapBufferRect(bg, TILE_TOP_EDGE_START + i, i - 1 + x, y - 1, 1, 1, 14); - - // Draw sides - FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_TOP, x - 1, y, 1, 1, 14); - FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_TOP, deltaX + x, y, 1, 1, 14); - FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_MID, x - 1, y + 1, 1, 1, 14); - FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_MID, deltaX + x, y + 1, 1, 1, 14); - FillBgTilemapBufferRect(bg, TILE_LEFT_EDGE_BOT, x - 1, y + 2, 1, 1, 14); - FillBgTilemapBufferRect(bg, TILE_RIGHT_EDGE_BOT, deltaX + x, y + 2, 1, 1, 14); - - // Draw bottom edge - for (i = 0; i < 1 + TILE_BOT_EDGE_END - TILE_BOT_EDGE_START; i++) - FillBgTilemapBufferRect(bg, TILE_BOT_EDGE_START + i, i - 1 + x, y + deltaY, 1, 1, 14); -} - -static void LoadMapNamePopUpWindowBg(void) -{ - u8 popUpThemeId; - u8 popupWindowId = GetMapNamePopUpWindowId(); + u8 mapNamePopUpWindowId = GetPrimaryPopUpWindowId(); + u8 weatherPopUpWindowId = GetSecondaryPopUpWindowId(); u16 regionMapSectionId = gMapHeader.regionMapSectionId; if (regionMapSectionId >= KANTO_MAPSEC_START) @@ -405,14 +248,10 @@ static void LoadMapNamePopUpWindowBg(void) else regionMapSectionId = 0; // Discard kanto region sections; } - popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId]; - LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), sMapPopUp_OutlineTable[popUpThemeId], 0x400, 0x21D); - CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame); - PutWindowTilemap(popupWindowId); - if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES) - LoadPalette(&sMapPopUp_Palette_Underwater, BG_PLTT_ID(14), sizeof(sMapPopUp_Palette_Underwater)); - else - LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], BG_PLTT_ID(14), sizeof(sMapPopUp_PaletteTable[0])); - BlitBitmapToWindow(popupWindowId, sMapPopUp_Table[popUpThemeId], 0, 0, 80, 24); + PutWindowTilemap(mapNamePopUpWindowId); + PutWindowTilemap(weatherPopUpWindowId); + + BlitBitmapRectToWindow(mapNamePopUpWindowId, gPopUpWindowBorder_Tiles, 0, 0, DISPLAY_WIDTH, 24, 0, 0, DISPLAY_WIDTH, 24); + BlitBitmapRectToWindow(weatherPopUpWindowId, gPopUpWindowBorder_Tiles, 0, 24, DISPLAY_WIDTH, 24, 0, 0, DISPLAY_WIDTH, 24); } diff --git a/src/menu.c b/src/menu.c index dd43e310dc..f57e7fd3ff 100644 --- a/src/menu.c +++ b/src/menu.c @@ -60,8 +60,11 @@ static void WindowFunc_DrawStdFrameWithCustomTileAndPalette(u8, u8, u8, u8, u8, static void WindowFunc_ClearStdWindowAndFrameToTransparent(u8, u8, u8, u8, u8, u8); static void task_free_buf_after_copying_tile_data_to_vram(u8 taskId); +EWRAM_DATA u8 gPopupTaskId; + static EWRAM_DATA u8 sStartMenuWindowId = 0; -static EWRAM_DATA u8 sMapNamePopupWindowId = 0; +static EWRAM_DATA u8 sPrimaryPopupWindowId = 0; +static EWRAM_DATA u8 sSecondaryPopupWindowId = 0; static EWRAM_DATA struct Menu sMenu = {0}; static EWRAM_DATA u16 sTileNum = 0; static EWRAM_DATA u8 sPaletteNum = 0; @@ -144,7 +147,8 @@ void InitStandardTextBoxWindows(void) { InitWindows(sStandardTextBox_WindowTemplates); sStartMenuWindowId = WINDOW_NONE; - sMapNamePopupWindowId = WINDOW_NONE; + sPrimaryPopupWindowId = WINDOW_NONE; + sSecondaryPopupWindowId = WINDOW_NONE; } void FreeAllOverworldWindowBuffers(void) @@ -520,22 +524,22 @@ static u16 UNUSED GetStandardFrameBaseTileNum(void) u8 AddMapNamePopUpWindow(void) { - if (sMapNamePopupWindowId == WINDOW_NONE) - sMapNamePopupWindowId = AddWindowParameterized(0, 1, 1, 10, 3, 14, 0x107); - return sMapNamePopupWindowId; + if (sPrimaryPopupWindowId == WINDOW_NONE) + sPrimaryPopupWindowId = AddWindowParameterized(0, 0, 0, 30, 3, 14, 0x107); + return sPrimaryPopupWindowId; } -u8 GetMapNamePopUpWindowId(void) +u8 GetPrimaryPopUpWindowId(void) { - return sMapNamePopupWindowId; + return sPrimaryPopupWindowId; } -void RemoveMapNamePopUpWindow(void) +void RemovePrimaryPopUpWindow(void) { - if (sMapNamePopupWindowId != WINDOW_NONE) + if (sPrimaryPopupWindowId != WINDOW_NONE) { - RemoveWindow(sMapNamePopupWindowId); - sMapNamePopupWindowId = WINDOW_NONE; + RemoveWindow(sPrimaryPopupWindowId); + sPrimaryPopupWindowId = WINDOW_NONE; } } @@ -2145,3 +2149,41 @@ void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) break; } } + +// BSBob map pop-ups +u8 AddWeatherPopUpWindow(void) +{ + if (sSecondaryPopupWindowId == WINDOW_NONE) + sSecondaryPopupWindowId = AddWindowParameterized(0, 0, 17, 30, 3, 14, 0x161); + return sSecondaryPopupWindowId; +} + +u8 GetSecondaryPopUpWindowId(void) +{ + return sSecondaryPopupWindowId; +} + +void RemoveSecondaryPopUpWindow(void) +{ + if (sSecondaryPopupWindowId != WINDOW_NONE) + { + RemoveWindow(sSecondaryPopupWindowId); + sSecondaryPopupWindowId = WINDOW_NONE; + } +} + +void HBlankCB_DoublePopupWindow(void) +{ + u16 offset = gTasks[gPopupTaskId].data[2]; + u16 scanline = REG_VCOUNT; + + if (scanline < 80 || scanline > 160) + { + REG_BG0VOFS = offset; + REG_BLDALPHA = BLDALPHA_BLEND(15, 5); + } + else + { + REG_BG0VOFS = 512 - offset; + } +} diff --git a/src/rtc.c b/src/rtc.c index b79f62a3c4..9f92894263 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -1,6 +1,7 @@ #include "global.h" #include "rtc.h" #include "string_util.h" +#include "strings.h" #include "text.h" // iwram bss @@ -344,3 +345,36 @@ u32 RtcGetLocalDayCount(void) { return RtcGetDayCount(&sRtc); } + +void FormatDecimalTimeWithoutSeconds(u8 *txtPtr, s8 hour, s8 minute, bool8 is24Hour) +{ + RtcCalcLocalTime(); + switch (is24Hour) + { + case TRUE: + txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2); + *txtPtr++ = CHAR_COLON; + txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case FALSE: + if (hour == 0) + hour = 12; + + if (hour < 13) + txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2); + else + txtPtr = ConvertIntToDecimalStringN(txtPtr, hour - 12, STR_CONV_MODE_LEADING_ZEROS, 2); + + *txtPtr++ = CHAR_COLON; + txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2); + txtPtr = StringAppend(txtPtr, gText_Space); + if (hour < 13) + txtPtr = StringAppend(txtPtr, gText_AM); + else + txtPtr = StringAppend(txtPtr, gText_PM); + break; + } + + *txtPtr++ = EOS; + *txtPtr = EOS; +} diff --git a/src/strings.c b/src/strings.c index d2a82ada48..cb9e8fc470 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1819,3 +1819,5 @@ const u8 gText_Answer[] = _("ANSWER"); const u8 gText_PokeBalls[] = _("POKé BALLS"); const u8 gText_Berry[] = _("BERRY"); const u8 gText_Berries[] = _("BERRIES"); +const u8 gText_AM[] = _("AM"); +const u8 gText_PM[] = _("PM"); \ No newline at end of file