From 4a7a3df2052a2e0a5f88a8c087f47e75df3ed357 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:36:53 -0500 Subject: [PATCH 1/3] Move SeedRngWithRtc fix to BUGFIX conditional --- docs/bugs_and_glitches.md | 46 --------------------------------------- src/main.c | 22 +++++++++++-------- 2 files changed, 13 insertions(+), 55 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 07955ecd5..94fc4314d 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -13,55 +13,9 @@ Fixes are written in the `diff` format. If you've used Git before, this should l ## Contents -- [RNG does not get seeded](#rng-does-not-get-seeded) - [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker) -## RNG does not get seeded - -**Fix:** Add the following function to [src/main.c](https://github.com/pret/pokeemerald/blob/master/src/main.c): -```diff -+static void SeedRngWithRtc(void) -+{ -+ u32 seed = RtcGetMinuteCount(); -+ seed = (seed >> 16) ^ (seed & 0xFFFF); -+ SeedRng(seed); -+} -``` - -And edit `AgbMain`: - -```diff - ... - RtcInit(); - CheckForFlashMemory(); - InitMainCallbacks(); - InitMapMusic(); -+ SeedRngWithRtc(); - ClearDma3Requests(); - ... -``` - -This restores the code of Ruby/Sapphire. - -**Alternate Fix:** Edit the following function in [src/title_screen.c](https://github.com/pret/pokeemerald/blob/master/src/title_screen.c): - -```diff -void CB2_InitTitleScreen(void) -{ - switch (gMain.state) - { - default: - case 0: - SetVBlankCallback(NULL); -+ StartTimer1(); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - ... -``` -This matches what FRLG does and obtains the seed differently than RS, independently of the RTC. - ## Scrolling through items in the bag causes the image to flicker **Fix:** Add the following function to [src/item_menu_icons.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu_icons.c): diff --git a/src/main.c b/src/main.c index 9fd1d0a35..f0ad4ce94 100644 --- a/src/main.c +++ b/src/main.c @@ -75,7 +75,7 @@ static EWRAM_DATA u16 gTrainerId = 0; static void UpdateLinkAndCallCallbacks(void); static void InitMainCallbacks(void); static void CallCallbacks(void); -//static void SeedRngWithRtc(void); +static void SeedRngWithRtc(void); static void ReadKeys(void); void InitIntrHandlers(void); static void WaitForVBlank(void); @@ -102,7 +102,9 @@ void AgbMain() CheckForFlashMemory(); InitMainCallbacks(); InitMapMusic(); - //SeedRngWithRtc(); see comment at SeedRngWithRtc declaration below +#ifdef BUGFIX + SeedRngWithRtc(); // see comment at SeedRngWithRtc definition below +#endif ClearDma3Requests(); ResetBgs(); SetDefaultFontsPointer(); @@ -213,13 +215,15 @@ void EnableVCountIntrAtLine150(void) EnableInterrupts(INTR_FLAG_VCOUNT); } -// oops! FRLG commented this out to remove RTC, however Emerald didnt undo this! -//static void SeedRngWithRtc(void) -//{ -// u32 seed = RtcGetMinuteCount(); -// seed = (seed >> 16) ^ (seed & 0xFFFF); -// SeedRng(seed); -//} +// FRLG commented this out to remove RTC, however Emerald didn't undo this! +#ifdef BUGFIX +static void SeedRngWithRtc(void) +{ + u32 seed = RtcGetMinuteCount(); + seed = (seed >> 16) ^ (seed & 0xFFFF); + SeedRng(seed); +} +#endif void InitKeys(void) { From fa3acd79e7c38f8bd8bce4beff34f432a584fba3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:37:22 -0500 Subject: [PATCH 2/3] Fix missing header for sub_817F77C BUGFIX --- src/pokemon_animation.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index c4077aff4..9c8eaca9a 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -6,6 +6,7 @@ #include "task.h" #include "trig.h" #include "util.h" +#include "data.h" #include "constants/battle_anim.h" #include "constants/rgb.h" From 9ed413fe8f3c5d43123368db08d90b7f069d14d3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 11 Jan 2021 10:39:53 -0500 Subject: [PATCH 3/3] Remove redundant bug fix description --- docs/bugs_and_glitches.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 94fc4314d..ce06c1489 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -1,7 +1,7 @@ # Bugs and Glitches -These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` preprocessor variable will fix some of these automatically. +These are known bugs and glitches in the original Pokémon Emerald game: code that clearly does not work as intended, or that only works in limited circumstances but has the possibility to fail or crash. Defining the `BUGFIX` and `UBFIX` preprocessor variables will fix some of these automatically. `UBFIX` will already be defined for MODERN builds. Fixes are written in the `diff` format. If you've used Git before, this should look familiar: @@ -49,21 +49,3 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p if (itemIndex != LIST_CANCEL) ... ``` - -## Pokémon that have an affine transform as part of their entry animation glitch when going in and out of Poké Balls without a screen transition in between - -**Fix:** Edit `sub_817F77C` in [src/pokemon_animation.c](https://github.com/pret/pokeemerald/blob/master/src/pokemon_animation.c#L1028): - -```diff - ... --#ifdef BUGFIX - else - { - // FIX: Reset these back to normal after they were changed so Poké Ball catch/release - // animations without a screen transition in between don't break - sprite->affineAnimPaused = FALSE; - sprite->affineAnims = gUnknown_082FF694; - } --#endif // BUGFIX -} -```