From 3364ec3fcbf83bafa2b8a5e1b9daf60e78d6ad4d Mon Sep 17 00:00:00 2001 From: scbroede <32247405+scbroede@users.noreply.github.com> Date: Thu, 8 Jan 2026 19:39:24 -0500 Subject: [PATCH] document some bugs (#884) --- docs/bugs_and_glitches.md | 95 +++++++++++++++++++++++++++ src/battle/battle_controller_player.c | 3 +- 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 44574fe9b7..ab488c6256 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -19,6 +19,13 @@ this is some code - [Acid Rain](#acid-rain) - [Fire Fang Always Bypasses Wonder Guard](#fire-fang-always-bypasses-wonder-guard) - [Post-KO Switch-In AI Scoring Overflow](#post-ko-switch-in-ai-scoring-overflow) + - [Using a non-Rage Move After Rage Clears Every Volatile Status Except Rage](#using-a-non-rage-move-after-rage-clears-every-volatile-status-except-rage) +- [Battle Animations](#battle-animations) + - [Using Facade Moves the Attacker's Sprite One Pixel Up](#using-facade-moves-the-attackers-sprite-one-pixel-up) + - [Using DynamicPunch Moves the Target's Sprite One Pixel Left](#using-dynamicpunch-moves-the-targets-sprite-one-pixel-left) + - [Using Helping Hand Moves the Target's Sprite One Pixel Left](#using-helping-hand-moves-the-targets-sprite-one-pixel-left) + - [Using Strength Moves the Attacker's Sprite Two Pixels Right](#using-strength-moves-the-attackers-sprite-two-pixels-right) + - [Using Spit Up Moves the Attacker's Sprite Two Pixels Right](#using-spit-up-moves-the-attackers-sprite-two-pixels-right) - [Wild Encounters](#wild-encounters) - [Fishing Encounters ignore Sticky Hold and Suction Cups](#fishing-encounters-ignore-sticky-hold-and-suction-cups) - [Title Screen](#title-screen) @@ -142,6 +149,94 @@ as having a score equivalent to 65 rather than 320. + u32 score, maxScore; ``` +### Using a non-Rage Move After Rage Clears Every Volatile Status Except Rage + +**Fix:** Edit the routine `BattleController_CheckPreMoveActions` in [`src/battle/battle_controller_player.c`](https://github.com/pret/pokeplatinum/blob/e7c9da4c9ff9e9c70c82fd03714cf9a9674d71cc/src/battle/battle_controller_player.c#L845): + +```diff +- battleCtx->battleMons[battler].statusVolatile &= VOLATILE_CONDITION_RAGE; ++ battleCtx->battleMons[battler].statusVolatile &= ~VOLATILE_CONDITION_RAGE; +``` + +## Battle Animations + +### Using Facade Moves the Attacker's Sprite One Pixel Up + +Due to the delays between scale commands being too short, they overlap with +each other, resulting in the sprite permanently moving upward. + +**Fix:** Increase the `Delay` values in [`res/battle/moves/facade/anim.s`](https://github.com/pret/pokeplatinum/blob/main/res/battle/moves/facade/anim.s) + +```diff +- Delay 8 ++ Delay 10 +``` + +Also update the sound effect timings to sync with the new delays: + +```diff +- PlayLoopedSoundEffectL SEQ_SE_DP_W207, 8, 6 ++ PlayLoopedSoundEffectL SEQ_SE_DP_W207, 10, 6 +``` + +### Using DynamicPunch Moves the Target's Sprite One Pixel Left + +Due to the delays between shake commands being too short, they overlap with +each other, resulting in the sprite permanently moving left. + +**Fix:** Increase the `Delay` value in [`res/battle/moves/dynamic_punch/anim.s`](https://github.com/pret/pokeplatinum/blob/e7c9da4c9ff9e9c70c82fd03714cf9a9674d71cc/res/battle/moves/dynamic_punch/anim.s#L18) + +```diff +- Delay 3 ++ Delay 4 +``` + +### Using Helping Hand Moves the Target's Sprite One Pixel Left + +Due to the delays between shake commands being too short, they overlap with +each other, resulting in the sprite permanently moving left. + +**Fix:** Move the `Delay 1` command into the loop in [`res/battle/moves/helping_hand/anim.s`](https://github.com/pret/pokeplatinum/blob/e7c9da4c9ff9e9c70c82fd03714cf9a9674d71cc/res/battle/moves/helping_hand/anim.s#L19) + + +```diff +- EndLoop +- Delay 1 ++ Delay 1 ++ EndLoop +``` + +### Using Strength Moves the Attacker's Sprite Two Pixels Right + +The animation moves the attacker's sprite right and left 2 pixels every other frame +as it shrinks. Since this happens an odd number of times, the sprite is moved permanently. + +**Fix:** Edit the routine `BattleAnimTask_Strength` in [`src/battle_anim/script_funcs_0.c`](https://github.com/pret/pokeplatinum/blob/e7c9da4c9ff9e9c70c82fd03714cf9a9674d71cc/src/battle_anim/script_funcs_0.c#L771) + +```diff + } else { ++ Point2D *pos; ++ BattleAnimUtil_GetBattlerDefaultPos(ctx->battleAnimSys, BattleAnimSystem_GetAttacker(ctx->battleAnimSys), pos); ++ PokemonSprite_SetAttribute(ctx->sprite, MON_SPRITE_X_CENTER, pos->x); + ctx->state++; + } +``` + +### Using Spit Up Moves the Attacker's Sprite Two Pixels Right + +Essentially the same as Strength. + +**Fix:** Edit the routine `BattleAnimTask_ShakeAndScaleAttacker` in [`src/battle_anim/script_funcs_3.c`](https://github.com/pret/pokeplatinum/blob/e7c9da4c9ff9e9c70c82fd03714cf9a9674d71cc/src/battle_anim/script_funcs_3.c#L2286) + +```diff + } else { ++ Point2D *pos; ++ BattleAnimUtil_GetBattlerDefaultPos(ctx->battleAnimSys, BattleAnimSystem_GetAttacker(ctx->battleAnimSys), pos); ++ PokemonSprite_SetAttribute(ctx->sprite, MON_SPRITE_X_CENTER, pos->x); + ctx->state++; + } +``` + ## Wild Encounters ### Fishing Encounters ignore Sticky Hold and Suction Cups diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 55dc59aea8..4961298a30 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -840,8 +840,9 @@ static void BattleControllerPlayer_CheckPreMoveActions(BattleSystem *battleSys, case PRE_MOVE_ACTION_STATE_CHECK_RAGE_FLAG: for (battler = 0; battler < maxBattlers; battler++) { - if ((battleCtx->battleMons[battler].statusVolatile & VOLATILE_CONDITION_RAGE) + if (battleCtx->battleMons[battler].statusVolatile & VOLATILE_CONDITION_RAGE && Battler_SelectedMove(battleCtx, battler) != MOVE_RAGE) { + // bug: clears every volatile status except rage battleCtx->battleMons[battler].statusVolatile &= VOLATILE_CONDITION_RAGE; } }