diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md index 93c759915..df7790b1b 100644 --- a/docs/bugs_and_glitches.md +++ b/docs/bugs_and_glitches.md @@ -68,6 +68,7 @@ Fixes are written in the `diff` format. If you've used Git before, this should l - [`ChooseWildEncounter` doesn't really validate the wild Pokémon species](#choosewildencounter-doesnt-really-validate-the-wild-pokémon-species) - [`TryObjectEvent` arbitrary code execution](#tryobjectevent-arbitrary-code-execution) - [`ClearWRAM` only clears WRAM bank 1](#clearwram-only-clears-wram-bank-1) +- [`BattleAnimCmd_ClearObjs` only clears the first 6⅔ objects](#battleanimcmd_clearobjs-only-clears-the-first-6⅔-objects) ## Thick Club and Light Ball can make (Special) Attack wrap around above 1024 @@ -1585,3 +1586,22 @@ This supports up to six entries. + jr c, .bank_loop ret ``` + + +## `BattleAnimCmd_ClearObjs` only clears the first 6⅔ objects + +**Fix:** Edit `BattleAnimCmd_ClearObjs` in [engine/battle_anims/anim_commands.asm](/engine/battle_anims/anim_commands.asm): + +```diff + BattleAnimCmd_ClearObjs: +-; BUG: This function only clears the first 6⅔ objects + ld hl, wActiveAnimObjects +- ld a, $a0 ; should be NUM_ANIM_OBJECTS * BATTLEANIMSTRUCT_LENGTH +- ld a, NUM_ANIM_OBJECTS * BATTLEANIMSTRUCT_LENGTH + .loop + ld [hl], 0 + inc hl + dec a + jr nz, .loop + ret +``` diff --git a/engine/battle_anims/anim_commands.asm b/engine/battle_anims/anim_commands.asm index 135ec31ea..b003ab4b4 100644 --- a/engine/battle_anims/anim_commands.asm +++ b/engine/battle_anims/anim_commands.asm @@ -644,11 +644,9 @@ BattleAnimCmd_ResetObp0: ret BattleAnimCmd_ClearObjs: -; BUG: This function only clears the first 6+(2/3) objects - +; BUG: This function only clears the first 6⅔ objects ld hl, wActiveAnimObjects - ld a, $a0 - ; ld a, wActiveAnimObjectsEnd - wActiveAnimObjects + ld a, $a0 ; should be NUM_ANIM_OBJECTS * BATTLEANIMSTRUCT_LENGTH .loop ld [hl], 0 inc hl