mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-13 23:23:43 +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)
|
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);
|
RemoveBagSprite(id + ITEMMENUSPRITE_ITEM);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateItemMenuSwapLine(void)
|
void CreateItemMenuSwapLine(void)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user