diff options
Diffstat (limited to 'docs/bugs_and_glitches.md')
-rw-r--r-- | docs/bugs_and_glitches.md | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md new file mode 100644 index 000000000..e23379cfb --- /dev/null +++ b/docs/bugs_and_glitches.md @@ -0,0 +1,77 @@ + +# 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. + +Fixes are written in the `diff` format. If you've used Git before, this should look familiar: + +```diff + this is some code +-delete red - lines ++add green + lines +``` + +## 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(); + ... +``` + +## 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 ++void HideBagItemIconSprite(u8 id) ++{ ++ u8 *spriteId = &gBagMenu->spriteId[10]; ++ if (spriteId[id] != 0xFF) ++ { ++ gSprites[spriteId[id]].invisible = TRUE; ++ } ++} + +``` + +and its corresponding declaration in [include/item_menu_icons.h](https://github.com/pret/pokeemerald/blob/master/include/item_menu_icons.h): + +```diff ++void HideBagItemIconSprite(u8 id); + +``` + +Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/pret/pokeemerald/blob/master/src/item_menu.c): + +```diff + ... +{ +- RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1); ++ HideBagItemIconSprite(gBagMenu->unk81B_1 ^ 1); ++ RemoveBagItemIconSprite(gBagMenu->unk81B_1); + if (a != -2) + ... +``` |