summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/bugs_and_glitches.md22
-rw-r--r--src/pokemon_animation.c9
-rw-r--r--src/pokemon_summary_screen.c10
3 files changed, 34 insertions, 7 deletions
diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md
index 3d294f5cf..285718598 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.
+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:
@@ -60,7 +60,7 @@ void CB2_InitTitleScreen(void)
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
@@ -95,3 +95,21 @@ Then edit `BagMenu_MoveCursorCallback` in [src/item_menu.c](https://github.com/p
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
+}
+```
diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c
index bfcf77b5c..58c174263 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -1041,6 +1041,15 @@ static void sub_817F77C(struct Sprite *sprite)
sprite->oam.matrixNum |= (sprite->hFlip << 3);
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)
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index ad037a5f5..578b9768e 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -2578,7 +2578,7 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
ScheduleBgCopyTilemapToVram(3);
}
-static void SetDexNumberColor(bool8 isMonShiny)
+static void SetMonPicBackgroundPalette(bool8 isMonShiny)
{
if (!isMonShiny)
SetBgTilemapPalette(3, 1, 4, 8, 8, 0);
@@ -2715,12 +2715,12 @@ static void PrintNotEggInfo(void)
if (!IsMonShiny(mon))
{
PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1);
- SetDexNumberColor(FALSE);
+ SetMonPicBackgroundPalette(FALSE);
}
else
{
PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7);
- SetDexNumberColor(TRUE);
+ SetMonPicBackgroundPalette(TRUE);
}
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
}
@@ -2728,9 +2728,9 @@ static void PrintNotEggInfo(void)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
if (!IsMonShiny(mon))
- SetDexNumberColor(FALSE);
+ SetMonPicBackgroundPalette(FALSE);
else
- SetDexNumberColor(TRUE);
+ SetMonPicBackgroundPalette(TRUE);
}
StringCopy(gStringVar1, gText_LevelSymbol);
ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3);