mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Merge pull request #1688 from coltongit/patch-4
Add bugfix from bugs_and_glitches.md to BUGFIX
This commit is contained in:
commit
de1145e790
@ -1,51 +0,0 @@
|
||||
|
||||
# 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` 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:
|
||||
|
||||
```diff
|
||||
this is some code
|
||||
-delete red - lines
|
||||
+add green + lines
|
||||
```
|
||||
|
||||
## Contents
|
||||
|
||||
- [Scrolling through items in the bag causes the image to flicker](#scrolling-through-items-in-the-bag-causes-the-image-to-flicker)
|
||||
|
||||
|
||||
## 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->itemIconSlot);
|
||||
+ HideBagItemIconSprite(gBagMenu->itemIconSlot ^ 1);
|
||||
+ RemoveBagItemIconSprite(gBagMenu->itemIconSlot);
|
||||
if (itemIndex != LIST_CANCEL)
|
||||
...
|
||||
```
|
@ -544,7 +544,22 @@ void AddBagItemIconSprite(u16 itemId, u8 id)
|
||||
|
||||
void RemoveBagItemIconSprite(u8 id)
|
||||
{
|
||||
// BUG: For one frame, the item you scroll to in the Bag menu
|
||||
// will have an incorrect palette and may be seen as a flicker.
|
||||
#ifdef BUGFIX
|
||||
u8 *spriteId = &gBagMenu->spriteIds[ITEMMENUSPRITE_ITEM];
|
||||
|
||||
if (spriteId[id ^ 1] != SPRITE_NONE)
|
||||
gSprites[spriteId[id ^ 1]].invisible = TRUE;
|
||||
|
||||
if (spriteId[id] != SPRITE_NONE)
|
||||
{
|
||||
DestroySpriteAndFreeResources(&gSprites[spriteId[id]]);
|
||||
spriteId[id] = SPRITE_NONE;
|
||||
}
|
||||
#else
|
||||
RemoveBagSprite(id + ITEMMENUSPRITE_ITEM);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CreateItemMenuSwapLine(void)
|
||||
|
Loading…
Reference in New Issue
Block a user