The cause seems to be that changing the move's target from the opponent (as is the default for Curse) to the user when they're not a ghost type only happens when the player selects the move in the actual menu. Meanwhile, when the AI uses Curse, this check is neglected and the opponent is always considered to be the target. This doesn't affect the effect of the move itself, but is relevant for Pressure, and so the player loses 1 PP while the AI loses 2. I haven't looked at the multiplayer code yet, but I'd suspect that this bug isn't relevant there, since both players pick the move from the menu, so I assume the check should happen for both. Still, it'd be good for someone to test this in link battles just to be safe.Someone looked at this more closely on cart, and noticed that this interaction is asymmetrical. If the player is facing an AI mon with Pressure and uses non-ghost Curse, it depletes only 1 PP. If the AI is facing a player mon with Pressure and uses non-ghost Curse, it depletes 2. There should be further investigation for link battles specifically to verify what happens in pvp for the purposes of Showdown.
/edit: more details for those interested:
- in battle_move.h, the move Curse by default has the target MOVE_TARGET_SELECTED (i.e. the opponent)
- in battle_script_commands.c, if gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].ability == ABILITY_PRESSURE, the PP are reduced twice
- meaning per default, Curse is affected by Pressure
- in battle_controller_player.c, when the player chooses a move:
if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
moveTarget = MOVE_TARGET_USER;
else
moveTarget = MOVE_TARGET_SELECTED;
}
meaning, if the pokemon isn't ghost, the target becomes the user, so unlike the default, Curse isn't affected by Pressure
- meanwhile, in battle_controller_opponent.c, there is nothing like that at all, so it keeps the default and Curse is affected
- in battle_scripts_1.s, this doesn't matter, since if the Pokémon isn't ghost, it immediately jumps to changing the user's stats, with no regard for the move target
Last edited: