Sometimes when using Assist, the game will softlock before it is able to choose a move (the game hangs on "(Pokemon) used ASSIST!" with the music playing and nothing happens beyond that).
After you have defeated Juan, his text starts appearing in a slow auto-scroll way that takes button input away from the player. This does not advance past his last line, and thus you are softlocked and unable to exit the battle when this happens, making Juan impossible to get past.
Tyranitar's Sand Stream is saying it "made it rain" and showing the rainy weather animation.
However, the next turn, it shows the proper graphics and text for Sandstorm. I only noticed it with tyranitar, but there might be others that have the same issue. Most likely caused by the fact that the source of it is a pokemon's ability rather than move.
Discharge works properly when being used from your own side (albeit it hits Pokemon in a weird order), but when an opponent uses it, it will hit its ally and only one of your own Pokemon.
If you use Toxic and it gets reflected by an opponent's Synchronize, instead of the opponent's "synchronize" card popping up, YOUR ability card pops up, and whatever string happened to occupy the last string variables gets used instead of the ability; e.g. "{Pokemon} was poisoned by foe {Pokemon's} evasiveness" was an example I got.
Because it has EFFECT_SPECIAL_DEFENSE_DOWN_2, it cannot work as the offensive move that it's supposed to be.
I guess someone will have to make a EFFECT_SPECIAL_DEFENSE_DOWN_HIT_2 or something like that, unless there's already a hold effect here that can cover it.
Psychic-type status moves will display the message "It doesn't affect X..." when missing against Dark-type targets, even though all status moves except Thunder Wave do not check the typechart
I haven't investigated whether the effect itself works or not, but when a Pokemon uses Magnet Rise, it immediately prints the "magnetism has worn off" message after the "Pokemon levitated using magnetism" message before the turn even ends.
When using Surf against an opposing team of Seaking and Tentacruel, after the first "It's not very effective" message appears, the text disappears and the game is softlocked. I haven't tested other similar situations to this, so I'm not sure exactly what triggers it.
Currently, Flash Cannon lowers special defense by two stages; Flash Cannon is supposed to hit with a secondary effect of having a chance of lowering special defense by one stage.
Effects such as Leftovers healing, Sandstorm damage, etc. are executed after the switch-in queue instead of before Pokémon switch in, the latter being the case in later generations.
Also update the behavior where Pokémon switch in prematurely. Example:
Battler A chooses Quiver Dance
Battler B is faster, chooses Double-Edge
Battler B damages Battler A but knocks itself out in the process due to recoil
Battler B then immediately switches in a new Pokémon, cancelling Battler A's Quiver Dance
In later generations, the defending Pokémon's action executes regardless of the opponent's presence.
(Exception: If the opponent has no more Pokémon in their party, cancel action)
Powder:
Add a case for CANCELLER_POWDER right before CANCELLER_THAW
effect = 0 to continue the loop in case the user is frozen and a move will thaw it first before executing Powder's damage battle script.
Do not clear Powdered status after checking as it lasts for the duration of the turn!
Protean:
See Discord DMs ;^)
Also note that Psychic Terrain's priority blocking effect needs to be checked in ABE's ABILITYEFFECT_MOVES_BLOCK and not in AtkCanceller_UnableToUseMove to make sure the Protean user gets to transform.
Heal Block:
Add EFFECT_DREAM_EATER in IsHealBlockPreventingMove and fix the message that shows the inability to use a heal blocked move.
When using a move that targets both opponents in a wild double battle, the attack does damage to both opponents normally, but the graphics act as if only one Pokemon was targeted instead of going down the middle of both Pokemon like in a trainer battle; this issue is not present in trainer battles (I noticed this when using Bubblebeam if it matters).
EDIT: As huderlem mentions below, I misunderstood the issue. The issue is not that graphics in wild doubles are messed up, but that moves that have been changed to hit multiple opponents need to have their animations changed.
atk69_setgravity should check each battler's semi invulnerable status to see if they are currently using Fly or Bounce (and Sky Drop when that gets implemented), and CancelMultiTurnMove if they do.
If there are two wild Pokemon still on the field in a wild double battle, and one of them uses Teleport, the battle immediately ends, even if the other Pokemon is still on the field.
The game softlocks after selecting which move to replace when the item expansion is installed. This happens both when learning moves by TM and by level up.
Charge Beam is supposed to deal damage with a chance of raising Special Attack; right now it just boosts Special Attack without dealing damage.
EDIT: I haven't tested it, but looking at how it's defined, I think Fiery Dance has the same issue. Additionally, I have determined that this issue stems from the fact that there is no EFFECT_SPECIAL_ATTACK_UP effect defined (there were no moves that dealt damage and raised Special Attack in Gen 3, so this will need to be added).
Future Sight seems to always do 0 damage, regardless of types, levels, or stats. Additionally, it can hit through Wonder Guard (though since it does 0 damage, my Shedinja didn't die :P).
ABILITY_IMPOSTER:
check if opposite battler is semi invulnerable
ABILITY_DEFIANT:
ABILITY_COMPETITIVE:
the way these were implemented makes it impossible to check if the battler's stat was lowered by itself/its ally or an opponent (defiant/competitive wont activate in the former case)
ABILITY_CURSED_BODY:
GetBattleMonMoveSlot(&gBattleMons[gBattlerAttacker], gChosenMove) is completely unecessary, just read from gChosenMovePos
also check if the chosen move has pp left
ABILITY_ANGER_POINT:
manually setting sB_ANIM_ARG1 to the chosen stat animation will not be indicative of amount of stages raised, i suggest adding 'setgraphicalstatchangevalues' to the script and setting gBattleScripting.statChanger to '12 - gBattleMons[battler].statStages[STAT_ATK] then | STAT_ATTACK'
nitpick: wrong name for battle script & string: "angrypoint"
ABILITY_JUSTIFIED:
ABILITY_RATTLED:
you forgot to buffer the stat to change, either call ChangeStatBuffs or use PREPARE_STAT_BUFFER
ABILITY_WEAK_ARMOR:
check if the current move is physical (weak armor only activates on physical hits)
speed should raise by 2, not 1
Rock Polish could use some sort of sound effect when doing the actual polishing (lines being drawn). Right now it sounds a bit empty before the sparkle sound effect.