From 499354ddc5cdb5efcad95db7546b5dd0ee8d38c4 Mon Sep 17 00:00:00 2001 From: ravepossum Date: Mon, 15 Jan 2024 01:51:44 -0500 Subject: [PATCH] fix performance issues, add config for alpha blend and 24 hour time, fix time display bugs, reverse readme changes --- README.md | 14 ++--- ..._popup_tiles.png => map_popup_primary.png} | Bin 9321 -> 9264 bytes graphics/interface/map_popup_secondary.png | Bin 0 -> 9265 bytes include/graphics.h | 4 -- include/map_name_popup.h | 4 ++ include/menu.h | 4 +- src/graphics.c | 3 - src/map_name_popup.c | 54 +++++++++++------- src/menu.c | 10 ++-- src/rtc.c | 7 +-- 10 files changed, 54 insertions(+), 46 deletions(-) rename graphics/interface/{map_popup_tiles.png => map_popup_primary.png} (97%) create mode 100644 graphics/interface/map_popup_secondary.png diff --git a/README.md b/README.md index adde8c3af2..d9148b32ec 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,11 @@ -# pokeemerald branches +# Pokémon Emerald -This is a feature branch repo for [pret's](https://pret.github.io/) pokeemerald decomp. +This is a decompilation of Pokémon Emerald. -# Branches +It builds the following ROM: -## bsbob_map_popups +* [**pokeemerald.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=1961) `sha1: f3ae088181bf583e55daf962a92bb46f4f1d07b7` -This is a port of BSBob's map pop-ups from [Vanadium Version](https://github.com/nielsmittertreiner/pokeemerald/tree/vanadium). If you pull this, please credit him. +To set up the repository, see [INSTALL.md](INSTALL.md). -![bsbob_map_popup.gif](bsbob_map_popup.gif) - -NOTE: This currently only builds on modern, not agbcc. I'm working on it. \ No newline at end of file +For contacts and other pret projects, see [pret.github.io](https://pret.github.io/). diff --git a/graphics/interface/map_popup_tiles.png b/graphics/interface/map_popup_primary.png similarity index 97% rename from graphics/interface/map_popup_tiles.png rename to graphics/interface/map_popup_primary.png index 546c4a420ccc18a6e8c3cd2558910251100d0cbb..72602052fe3e30f2d01371a5c526bc34e08f3fb0 100644 GIT binary patch delta 135 zcmV;20C@lDNU%td7YY~%0{{R3^PGTBu_2x#aa>76K~z|U?a#>#03i^>z#;#n_sOTl zN?Ze`9f2##V@3AB?hK}9Fg=6m8BEV$dXIpkmc25+XqUY=)(`G(a0l)l@Fd)s;Dxw+ p@MfF}jZ>j1Xs=>VNjI=3ayC<6;MXZXkCtBjysxzRw)7vS?fex&dA=X| zcT^P^`L!NfdBH+dYPr+nkc^o77t&qrgT74vEwf#)f-f)dL;Vic13P!56qx$9gVkw+ l75dIlh8u4@BhLB*=i_UN2YZvAZU#D)!PC{xWt~$(697lOQy~BV diff --git a/graphics/interface/map_popup_secondary.png b/graphics/interface/map_popup_secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..39ad7d2e062cefcbb1adf1ef11717580a73546e9 GIT binary patch literal 9265 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 KANTO_MAPSEC_START) @@ -249,9 +259,11 @@ static void LoadMapNamePopUpWindowBgs(void) regionMapSectionId = 0; // Discard kanto region sections; } - PutWindowTilemap(mapNamePopUpWindowId); - PutWindowTilemap(weatherPopUpWindowId); + LoadPalette(sMapPopUpTiles_Palette, BG_PLTT_ID(14), sizeof(sMapPopUpTiles_Palette)); - 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); + CopyToWindowPixelBuffer(primaryPopUpWindowId, sMapPopUpTiles_Primary, sizeof(sMapPopUpTiles_Primary), 0); + CopyToWindowPixelBuffer(secondaryPopUpWindowId, sMapPopUpTiles_Secondary, sizeof(sMapPopUpTiles_Secondary), 0); + + PutWindowTilemap(primaryPopUpWindowId); + PutWindowTilemap(secondaryPopUpWindowId); } diff --git a/src/menu.c b/src/menu.c index f57e7fd3ff..f1c179e2af 100644 --- a/src/menu.c +++ b/src/menu.c @@ -6,6 +6,7 @@ #include "event_data.h" #include "graphics.h" #include "main.h" +#include "map_name_popup.h" #include "menu.h" #include "menu_helpers.h" #include "palette.h" @@ -60,7 +61,7 @@ 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; +EWRAM_DATA u8 gPopupTaskId = 0; static EWRAM_DATA u8 sStartMenuWindowId = 0; static EWRAM_DATA u8 sPrimaryPopupWindowId = 0; @@ -522,7 +523,7 @@ static u16 UNUSED GetStandardFrameBaseTileNum(void) return STD_WINDOW_BASE_TILE_NUM; } -u8 AddMapNamePopUpWindow(void) +u8 AddPrimaryPopUpWindow(void) { if (sPrimaryPopupWindowId == WINDOW_NONE) sPrimaryPopupWindowId = AddWindowParameterized(0, 0, 0, 30, 3, 14, 0x107); @@ -2151,7 +2152,7 @@ void BufferSaveMenuText(u8 textId, u8 *dest, u8 color) } // BSBob map pop-ups -u8 AddWeatherPopUpWindow(void) +u8 AddSecondaryPopUpWindow(void) { if (sSecondaryPopupWindowId == WINDOW_NONE) sSecondaryPopupWindowId = AddWindowParameterized(0, 0, 17, 30, 3, 14, 0x161); @@ -2180,7 +2181,8 @@ void HBlankCB_DoublePopupWindow(void) if (scanline < 80 || scanline > 160) { REG_BG0VOFS = offset; - REG_BLDALPHA = BLDALPHA_BLEND(15, 5); + if(MAP_POPUP_ALPHA_BLEND) + REG_BLDALPHA = BLDALPHA_BLEND(15, 5); } else { diff --git a/src/rtc.c b/src/rtc.c index 9f92894263..0344d17131 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -358,9 +358,8 @@ void FormatDecimalTimeWithoutSeconds(u8 *txtPtr, s8 hour, s8 minute, bool8 is24H break; case FALSE: if (hour == 0) - hour = 12; - - if (hour < 13) + txtPtr = ConvertIntToDecimalStringN(txtPtr, 12, STR_CONV_MODE_LEADING_ZEROS, 2); + else 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); @@ -368,7 +367,7 @@ void FormatDecimalTimeWithoutSeconds(u8 *txtPtr, s8 hour, s8 minute, bool8 is24H *txtPtr++ = CHAR_COLON; txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2); txtPtr = StringAppend(txtPtr, gText_Space); - if (hour < 13) + if (hour < 12) txtPtr = StringAppend(txtPtr, gText_AM); else txtPtr = StringAppend(txtPtr, gText_PM);