Merge pull request #1271 from Sierraffinity/pkmn_affine_anim_bugfix

Add bugfix for Pokémon with affine transforms as part of their entry animation glitching when being sent out/put back in ball
This commit is contained in:
GriffinR 2020-12-13 18:43:55 -05:00 committed by GitHub
commit 6dea3374d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 7 deletions

View File

@ -1,7 +1,7 @@
# Bugs and Glitches # 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. 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.
Fixes are written in the `diff` format. If you've used Git before, this should look familiar: Fixes are written in the `diff` format. If you've used Git before, this should look familiar:
@ -60,7 +60,7 @@ void CB2_InitTitleScreen(void)
SetGpuReg(REG_OFFSET_BLDY, 0); SetGpuReg(REG_OFFSET_BLDY, 0);
... ...
``` ```
This matches with the code of FR/LG and does what GF originally wanted to do. 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 ## Scrolling through items in the bag causes the image to flicker
@ -95,3 +95,21 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p
if (a != -2) if (a != -2)
... ...
``` ```
## 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
}
```

View File

@ -1041,6 +1041,15 @@ static void sub_817F77C(struct Sprite *sprite)
sprite->oam.matrixNum |= (sprite->hFlip << 3); sprite->oam.matrixNum |= (sprite->hFlip << 3);
sprite->oam.affineMode = ST_OAM_AFFINE_OFF; sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
} }
#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
} }
static void pokemonanimfunc_01(struct Sprite *sprite) static void pokemonanimfunc_01(struct Sprite *sprite)

View File

@ -2578,7 +2578,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
ScheduleBgCopyTilemapToVram(3); ScheduleBgCopyTilemapToVram(3);
} }
static void SetDexNumberColor(bool8 isMonShiny) static void SetMonPicBackgroundPalette(bool8 isMonShiny)
{ {
if (!isMonShiny) if (!isMonShiny)
SetBgTilemapPalette(3, 1, 4, 8, 8, 0); SetBgTilemapPalette(3, 1, 4, 8, 8, 0);
@ -2715,12 +2715,12 @@ static void PrintNotEggInfo(void)
if (!IsMonShiny(mon)) if (!IsMonShiny(mon))
{ {
PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1); PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1);
SetDexNumberColor(FALSE); SetMonPicBackgroundPalette(FALSE);
} }
else else
{ {
PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7); PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7);
SetDexNumberColor(TRUE); SetMonPicBackgroundPalette(TRUE);
} }
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
} }
@ -2728,9 +2728,9 @@ static void PrintNotEggInfo(void)
{ {
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER); ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
if (!IsMonShiny(mon)) if (!IsMonShiny(mon))
SetDexNumberColor(FALSE); SetMonPicBackgroundPalette(FALSE);
else else
SetDexNumberColor(TRUE); SetMonPicBackgroundPalette(TRUE);
} }
StringCopy(gStringVar1, gText_LevelSymbol); StringCopy(gStringVar1, gText_LevelSymbol);
ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3); ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3);