From a26ee9d55ca7c3c890240bf77bf5fe2e442bd07b Mon Sep 17 00:00:00 2001 From: cawtds Date: Tue, 7 May 2024 20:13:27 +0200 Subject: [PATCH] added missing battle move effects --- asm/macros/battle_script.inc | 535 +- data/battle_scripts_1.s | 9304 +++++++++++++++++-------- include/battle.h | 2 + include/battle_scripts.h | 66 - include/battle_util.h | 2 + include/constants/battle_string_ids.h | 3 +- src/battle_message.c | 27 +- src/battle_script_commands.c | 1093 ++- src/battle_util.c | 33 + src/data/battle_move_effects.h | 323 +- 10 files changed, 7713 insertions(+), 3675 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 394a96d92..5a76029c0 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1349,6 +1349,298 @@ .4byte \func .endm +@ callnative macros + .macro metalburstdamagecalculator failInstr:req + callnative BS_CalcMetalBurstDmg + .4byte \failInstr + .endm + + .macro jumpifcantfling battler:req, jumpInstr:req + callnative BS_JumpIfCantFling + .byte \battler + .4byte \jumpInstr + .endm + + .macro itemstatchangeeffects battler:req + callnative BS_RunStatChangeItems + .byte \battler + .endm + + .macro allyswitchswapbattlers + callnative BS_AllySwitchSwapBattler + .endm + + .macro allyswitchfailchance jumpInstr:req + callnative BS_AllySwitchFailChance + .4byte \jumpInstr + .endm + + .macro dostockpilestatchangeswearoff, battler:req, statChangeInstr:req + callnative BS_DoStockpileStatChangesWearOff + .byte \battler + .4byte \statChangeInstr + .endm + + .macro jumpifmorethanhalfHP battler:req, jumpInstr:req + callnative BS_JumpIfMoreThanHalfHP + .byte \battler + .4byte \jumpInstr + .endm + + .macro itemrestorehp jumpInstr:req + callnative BS_ItemRestoreHP + .4byte \jumpInstr + .endm + + .macro itemcurestatus jumpInstr:req + callnative BS_ItemCureStatus + .4byte \jumpInstr + .endm + + .macro itemincreasestat + callnative BS_ItemIncreaseStat + .endm + + .macro itemrestorepp + callnative BS_ItemRestorePP + .endm + + .macro tryrevertweatherform + callnative BS_TryRevertWeatherForm + .endm + + .macro setsnow + callnative BS_SetSnow + .endm + + .macro applysaltcure battler:req + callnative BS_ApplySaltCure + .byte \battler + .endm + + .macro trysetoctolock battler:req, failInstr:req + callnative BS_TrySetOctolock + .byte \battler + .4byte \failInstr + .endm + + .macro setglaiverush + callnative BS_SetGlaiveRush + .endm + + .macro tryrelicsong + callnative BS_TryRelicSong + .endm + + .macro setpledge jumpInstr:req + callnative BS_SetPledge + .4byte \jumpInstr + .endm + + .macro setpledgestatus battler:req sidestatus:req + callnative BS_SetPledgeStatus + .byte \battler + .4byte \sidestatus + .endm + + .macro trycopycat failInstr:req + callnative BS_TryCopycat + .4byte \failInstr + .endm + + .macro setzeffect + callnative BS_SetZEffect + .endm + + @ Used by effects that may proc Symbiosis but do not call removeitem. + .macro trysymbiosis + callnative BS_TrySymbiosis + .endm + + @ returns B_SIDE_x to gBattleCommunication[0] + .macro getbattlerside battler:req + callnative BS_GetBattlerSide + .byte \battler + .endm + + .macro checkparentalbondcounter counter:req, ptr:req + callnative BS_CheckParentalBondCounter + .byte \counter + .4byte \ptr + .endm + + .macro jumpifcantloseitem battler:req, ptr:req + callnative BS_JumpIfCantLoseItem + .byte \battler + .4byte \ptr + .endm + + .macro handlemegaevo battler:req, case:req + callnative BS_HandleMegaEvolution + .byte \battler + .byte \case + .endm + + .macro handleprimalreversion battler:req, case:req + callnative BS_HandlePrimalReversion + .byte \battler + .byte \case + .endm + + .macro handleultraburst battler:req, case:req + callnative BS_HandleUltraBurst + .byte \battler + .byte \case + .endm + + .macro jumpifshelltrap battler:req, jumpInstr:req + callnative BS_JumpIfShellTrap + .byte \battler + .4byte \jumpInstr + .endm + + .macro jumpifemergencyexited battler:req, jumpInstr:req + callnative BS_JumpIfEmergencyExited + .byte \battler + .4byte \jumpInstr + .endm + + .macro jumpifrodaffected battler:req, jumpInstr:req + callnative BS_JumpIfRod + .4byte \jumpInstr + .endm + + .macro jumpifabsorbaffected battler:req, jumpInstr:req + callnative BS_JumpIfAbsorb + .4byte \jumpInstr + .endm + + .macro jumpifmotoraffected battler:req, jumpInstr:req + callnative BS_JumpIfMotor + .4byte \jumpInstr + .endm + + .macro jumpifargument argument:req, jumpInstr:req + callnative BS_JumpIfArgument + .byte \argument + .4byte \jumpInstr + .endm + + .macro setremoveterrain failInstr:req + callnative BS_SetRemoveTerrain + .4byte \failInstr + .endm + + .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req + callnative BS_JumpIfTerrainAffected + .byte \battler + .4byte \terrainFlags + .4byte \jumpInstr + .endm + + .macro tryreflecttype failInstr:req + callnative BS_TryReflectType + .4byte \failInstr + .endm + + @ Used to active a different Max Move effects. + .macro setmaxmoveeffect + callnative BS_SetMaxMoveEffect + .endm + + .macro setsteelsurge, failInstr:req + callnative BS_SetSteelsurge + .4byte \failInstr + .endm + + .macro damagenontypes + callnative BS_DamageNonTypes + .endm + + .macro trysetstatus1, ptr:req + callnative BS_TrySetStatus1 + .4byte \ptr + .endm + + .macro trysetstatus2, ptr:req + callnative BS_TrySetStatus2 + .4byte \ptr + .endm + + .macro tryhealsixthhealth, ptr:req + callnative BS_HealOneSixth + .4byte \ptr + .endm + + .macro tryrecycleberry, ptr:req + callnative BS_TryRecycleBerry + .4byte \ptr + .endm + + .macro updatedynamax + callnative BS_UpdateDynamax + .endm + + .macro jumpiftargetdynamaxed, ptr:req + callnative BS_JumpIfDynamaxed + .4byte \ptr + .endm + + .macro trytrainerslidezmovemsg + callnative BS_TryTrainerSlideZMoveMsg + .endm + + .macro trytrainerslidemegaevolutionmsg + callnative BS_TryTrainerSlideMegaEvolutionMsg + .endm + + .macro trytrainerslidedynamaxmsg + callnative BS_TryTrainerSlideDynamaxMsg + .endm + + .macro tryhealpulse failInstr:req + callnative BS_TryHealPulse + .4byte \failInstr + .endm + + .macro trydefog clear:req, failInstr:req + callnative BS_TryDefog + .byte \clear + .4byte \failInstr + .endm + + .macro trytriggerstatusform + callnative BS_TryTriggerStatusForm + .endm + + .macro setphotongeysercategory + callnative BS_SetPhotonGeyserCategory + .endm + + .macro tryupperhand failInstr:req + callnative BS_TryUpperHand + .4byte \failInstr + .endm + + .macro tryupdaterecoiltracker + callnative BS_TryUpdateRecoilTracker + .endm + + .macro trytidyup clear:req, jumpInstr:req + callnative BS_TryTidyUp + .byte \clear + .4byte \jumpInstr + .endm + + .macro trygulpmissile + callnative BS_TryGulpMissile + .endm + + .macro tryquash failInstr:req + callnative BS_TryQuash + .4byte \failInstr + .endm + @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES @@ -2009,6 +2301,7 @@ .macro setmoveeffect effect:req sethword sMOVE_EFFECT, \effect + sethword sSAVED_MOVE_EFFECT, \effect .endm .macro chosenstatus1animation battler:req, status:req @@ -2043,40 +2336,124 @@ copyarray \dst, \src, 0x4 .endm - .macro jumpifbytenotequal byte1:req, byte2:req, jumpptr:req - jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbytenotequal byte1:req, byte2:req, jumpInstr:req + jumpifarraynotequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifbyteequal byte1:req, byte2:req, jumpptr:req - jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbyteequal byte1:req, byte2:req, jumpInstr:req + jumpifarrayequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifmove move:req, jumpptr:req - jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifmove move:req, jumpInstr:req + jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifnotmove move:req, jumpptr:req - jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifnotmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifstatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, 0x0, \jumpptr + .macro jumpifnotchosenmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr .endm - .macro jumpifnostatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, 0x1, \jumpptr + .macro jumpifstatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, FALSE, \jumpInstr .endm - .macro jumpifmovehadnoeffect jumpptr:req - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr + .macro jumpifnostatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, TRUE, \jumpInstr .endm - .macro jumpifbattletype flags:req, jumpptr:req - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifmovehadnoeffect jumpInstr:req + jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpInstr .endm - .macro jumpifnotbattletype flags:req, jumpptr:req - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifside battler:req, side:req, equalJumpInstr:req + getbattlerside \battler + jumpifbyte CMP_EQUAL, gBattleCommunication, \side, \equalJumpInstr + .endm + + .macro jumpifbattletype flags:req, jumpInstr:req + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr + .endm + + .macro jumpifnotbattletype flags:req, jumpInstr:req + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr + .endm + + .macro dmg_1_8_targethp + manipulatedamage DMG_1_8_TARGET_HP + .endm + + .macro dmgtomaxattackerhp + manipulatedamage DMG_FULL_ATTACKER_HP + .endm + + .macro dmgtocurrattackerhp + manipulatedamage DMG_CURR_ATTACKER_HP + .endm + + .macro dmg_1_2_attackerhp + manipulatedamage DMG_1_2_ATTACKER_HP + .endm + + .macro jumpifflowerveil jumpInstr:req + jumpifnottype BS_TARGET, TYPE_GRASS, 1f + jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr + 1: + .endm + + .macro jumpifflowerveilattacker jumpInstr:req + jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f + jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr + 1: + .endm + + .macro setallytonexttarget jumpInstr:req + jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f + addbyte gBattlerTarget, 0x2 + goto \jumpInstr + 1: + subbyte gBattlerTarget, 0x2 + goto \jumpInstr + .endm + + .macro setallytonextattacker jumpInstr:req + jumpifbyte CMP_GREATER_THAN, gBattlerAttacker, 0x1, 1f + addbyte gBattlerAttacker, 0x2 + goto \jumpInstr + 1: + subbyte gBattlerAttacker, 0x2 + goto \jumpInstr + .endm + + .macro jumpifsafeguard jumpInstr:req + jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f + jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr + 1: + .endm + + @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs. + .macro jumpifunder200 battler:req, failInstr:req + various \battler, VARIOUS_JUMP_IF_UNDER_200 + .4byte \failInstr + .endm + + @ Sets the sky drop status and does all other necessary operations + .macro setskydrop + various 0, VARIOUS_SET_SKY_DROP + .endm + + @ Clears the sky drop status and does all other necessary operations. + @ If the target fainted in before this script is called, it goes to the given script. + .macro clearskydrop failInstr:req + various 0, VARIOUS_CLEAR_SKY_DROP + .4byte \failInstr + .endm + + @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn. + .macro skydropyawn + various 0, VARIOUS_SKY_DROP_YAWN .endm @ Tries to increase or decrease a battler's stat's stat stage by a specified amount. If impossible, jumps to \script. @@ -2110,132 +2487,24 @@ waitmessage B_WAIT_TIME_LONG .endm - .macro setallytonexttarget jumpInstr:req - jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f - addbyte gBattlerTarget, 0x2 - goto \jumpInstr - 1: - subbyte gBattlerTarget, 0x2 - goto \jumpInstr + .macro hitswitchtargetfailed + various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED .endm - .macro dmg_1_8_targethp - manipulatedamage DMG_1_8_TARGET_HP - .endm - - .macro jumpifsafeguard jumpInstr:req - jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr - 1: - .endm - - .macro dmgtomaxattackerhp - manipulatedamage DMG_FULL_ATTACKER_HP - .endm - -@ callnative macros - .macro itemrestorehp jumpInstr:req - callnative BS_ItemRestoreHP + .macro tryrevivalblessing, jumpInstr:req + various 0, VARIOUS_TRY_REVIVAL_BLESSING .4byte \jumpInstr .endm - .macro itemcurestatus jumpInstr:req - callnative BS_ItemCureStatus - .4byte \jumpInstr - .endm - - .macro itemincreasestat - callnative BS_ItemIncreaseStat - .endm - - .macro itemrestorepp - callnative BS_ItemRestorePP - .endm - - @ returns B_SIDE_x to gBattleCommunication[0] - .macro getbattlerside battler:req - callnative BS_GetBattlerSide - .byte \battler - .endm - - .macro flushtextbox - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - .endm - - .macro tryrevertweatherform - callnative BS_TryRevertWeatherForm - .endm - - @ Used by effects that may proc Symbiosis but do not call removeitem. - .macro trysymbiosis - callnative BS_TrySymbiosis - .endm - @ Will jump to script pointer if the specified battler has or has not fainted. .macro jumpiffainted battler:req, value:req, ptr:req getbattlerfainted \battler jumpifbyte CMP_EQUAL, gBattleCommunication, \value, \ptr .endm - .macro jumpifflowerveil jumpInstr:req - jumpifnottype BS_TARGET, TYPE_GRASS, 1f - jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr - 1: - .endm - - .macro jumpifflowerveilattacker jumpInstr:req - jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f - jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr - 1: - .endm - - .macro itemstatchangeeffects battler:req - callnative BS_RunStatChangeItems - .byte \battler - .endm - - .macro dostockpilestatchangeswearoff, battler:req, statChangeInstr:req - callnative BS_DoStockpileStatChangesWearOff - .byte \battler - .4byte \statChangeInstr - .endm - - .macro handleprimalreversion battler:req, case:req - callnative BS_HandlePrimalReversion - .byte \battler - .byte \case - .endm - - .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req - callnative BS_JumpIfTerrainAffected - .byte \battler - .4byte \terrainFlags - .4byte \jumpInstr - .endm - - .macro checkparentalbondcounter counter:req, ptr:req - callnative BS_CheckParentalBondCounter - .byte \counter - .4byte \ptr - .endm - - .macro damagenontypes - callnative BS_DamageNonTypes - .endm - - .macro tryupdaterecoiltracker - callnative BS_TryUpdateRecoilTracker - .endm - - .macro trytidyup clear:req, jumpInstr:req - callnative BS_TryTidyUp - .byte \clear - .4byte \jumpInstr - .endm - - .macro trygulpmissile - callnative BS_TryGulpMissile + .macro flushtextbox + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f00a9557f..7eacc0d49 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -23,6 +23,124 @@ .section script_data, "aw", %progbits .align 2 +BattleScript_LocalTrainerBattleWon:: + printstring STRINGID_PLAYERDEFEATEDTRAINER1 + trainerslidein BS_ATTACKER + waitstate + printstring STRINGID_TRAINER1LOSETEXT + getmoneyreward +BattleScript_LocalTrainerBattleWonGotMoney:: + printstring STRINGID_PLAYERGOTMONEY + waitmessage B_WAIT_TIME_LONG +BattleScript_PayDayMoneyAndPickUpItems:: + givepaydaymoney + pickup + end2 + +BattleScript_LocalBattleLost:: + jumpifbattletype BATTLE_TYPE_TRAINER_TOWER, BattleScript_BattleTowerLost + jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_EReaderOrSecretBaseTrainerEnd + jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, TRAINER_SECRET_BASE, BattleScript_EReaderOrSecretBaseTrainerEnd + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_RivalBattleLost +BattleScript_LocalBattleLostPrintWhiteOut:: + jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd + printstring STRINGID_PLAYERWHITEOUT + waitmessage B_WAIT_TIME_LONG + getmoneyreward + printstring STRINGID_PLAYERWHITEOUT2 + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EReaderOrSecretBaseTrainerEnd + +BattleScript_LocalBattleLostEnd:: + printstring STRINGID_PLAYERLOSTAGAINSTENEMYTRAINER + waitmessage B_WAIT_TIME_LONG + getmoneyreward + printstring STRINGID_PLAYERPAIDPRIZEMONEY + waitmessage B_WAIT_TIME_LONG +BattleScript_EReaderOrSecretBaseTrainerEnd:: + end2 + +BattleScript_RivalBattleLost:: + jumpifhasnohp BS_ATTACKER, BattleScript_RivalBattleLostSkipMonRecall + printstring STRINGID_TRAINER1MON1COMEBACK + waitmessage B_WAIT_TIME_LONG + returnatktoball + waitstate +BattleScript_RivalBattleLostSkipMonRecall:: + trainerslidein BS_ATTACKER + waitstate + printstring STRINGID_TRAINER1WINTEXT + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 2, BattleScript_LocalBattleLostPrintWhiteOut + end2 + +BattleScript_BattleTowerLost:: + getbattlersforrecall + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_BattleTowerLostLostSkipMonRecall + printfromtable gDoubleBattleRecallStrings + waitmessage B_WAIT_TIME_LONG + returnopponentmon1toball BS_ATTACKER + waitstate + returnopponentmon2toball BS_ATTACKER + waitstate +BattleScript_BattleTowerLostLostSkipMonRecall:: + trainerslidein BS_ATTACKER + waitstate + printstring STRINGID_TRAINER1WINTEXT + jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_BattleTowerLostLostSkipDouble + printstring STRINGID_TRAINER2WINTEXT +BattleScript_BattleTowerLostLostSkipDouble:: + end2 + +BattleScript_LinkBattleWonOrLost:: + printstring STRINGID_BATTLEEND + waitmessage B_WAIT_TIME_LONG + endlinkbattle + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_BattleTowerTrainerBattleWon:: + printstring STRINGID_PLAYERDEFEATEDTRAINER1 + trainerslidein BS_ATTACKER + waitstate + jumpifnotbattletype BATTLE_TYPE_TRAINER_TOWER, BattleScript_BattleTowerEtcTrainerBattleWonSkipText + printstring STRINGID_TRAINER1LOSETEXT + jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_BattleTowerEtcTrainerBattleWonSkipText + printstring STRINGID_TRAINER2LOSETEXT +BattleScript_BattleTowerEtcTrainerBattleWonSkipText:: + pickup + end2 + +BattleScript_PrintCantRunFromTrainer:: + jumpifbattletype BATTLE_TYPE_FIRST_BATTLE, BattleScript_LeftoverBirchString + printstring STRINGID_NORUNNINGFROMTRAINERS + end2 + +BattleScript_LeftoverBirchString:: + printstring STRINGID_DONTLEAVEBIRCH + end2 + +BattleScript_TooScaredToMove:: + printstring STRINGID_MONTOOSCAREDTOMOVE + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_MON_SCARED + goto BattleScript_MoveEnd + +BattleScript_GhostGetOutGetOut:: + printstring STRINGID_GHOSTGETOUTGETOUT + playanimation BS_ATTACKER, B_ANIM_GHOST_GET_OUT + goto BattleScript_MoveEnd + +BattleScript_SilphScopeUnveiled:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_SILPHSCOPEUNVEILED + waitstate + playanimation BS_OPPONENT1, B_ANIM_SILPH_SCOPED + pause B_WAIT_TIME_SHORT + printstring STRINGID_GHOSTWASMAROWAK + waitmessage B_WAIT_TIME_LONG + end2 + +@ pokeemerald BattleScript_EffectTidyUp:: attackcanceler attackstring @@ -40,6 +158,2691 @@ BattleScript_EffectTidyUpDoMoveAnimation:: waitmessage B_WAIT_TIME_LONG goto BattleScript_EffectDragonDanceFromStatUp +BattleScript_EffectUpperHand:: + attackcanceler + tryupperhand BattleScript_FailedFromAtkString + goto BattleScript_HitFromAccCheck + +BattleScript_EffectShedTail:: + attackcanceler + attackstring + ppreduce + waitstate + jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_ButItFailed + setsubstitute + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString + attackanimation + waitanimation + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_SHEDITSTAIL + waitmessage B_WAIT_TIME_LONG + moveendto MOVEEND_ATTACKER_VISIBLE + moveendfrom MOVEEND_TARGET_VISIBLE + goto BattleScript_MoveSwitchOpenPartyScreen + +BattleScript_EffectPsychicNoise:: + printstring STRINGID_PKMNPREVENTEDFROMHEALING + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectFilletAway:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_FilletAwayTryAttack + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_FilletAwayTryAttack + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ButItFailed +BattleScript_FilletAwayTryAttack:: + halvehp BattleScript_ButItFailed + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FilletAwayTrySpAtk:: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FilletAwayTrySpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FilletAwayEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FilletAwayEnd:: + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + goto BattleScript_MoveEnd + +BattleScript_EffectDoodle:: + attackcanceler + attackstring + ppreduce + attackanimation + waitanimation + setbyte gBattleCommunication, 0 +BattleScript_EffectDoodle_CopyAbility: + trycopyability BS_ATTACKER, BattleScript_ButItFailed +.if B_ABILITY_POP_UP == TRUE + setbyte sFIXED_ABILITY_POPUP, TRUE + showabilitypopup BS_ATTACKER + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_ATTACKER + pause 20 + destroyabilitypopup + pause 40 +.endif + printstring STRINGID_PKMNCOPIEDFOE + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_MoveEnd + setallytonextattacker BattleScript_EffectDoodle_CopyAbility + goto BattleScript_MoveEnd + +BattleScript_EffectGlaiveRush:: + call BattleScript_EffectHit_Ret + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_TryFaintMon + setglaiverush + goto BattleScript_TryFaintMon + +BattleScript_SyrupBombActivates:: + printstring STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SyrupBombEndTurn:: + flushtextbox + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO animation: B_ANIM_SYRUP_BOMB_SPEED_DROP + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_SyrupBombTurnDmgEnd: + end2 + +BattleScript_EffectChillyReception:: + printstring STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE + waitmessage B_WAIT_TIME_LONG + attackcanceler + ppreduce + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalSun + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds + call BattleScript_EffectChillyReceptionPlayAnimation + setsnow + call BattleScript_MoveWeatherChangeRet + goto BattleScript_MoveSwitch +BattleScript_EffectChillyReceptionPlayAnimation: + attackstring + attackanimation + waitanimation + return +BattleScript_EffectChillyReceptionBlockedByPrimalSun: + call BattleScript_EffectChillyReceptionTrySwitchWeatherFailed + call BattleScript_ExtremelyHarshSunlightWasNotLessenedRet + goto BattleScript_MoveSwitch +BattleScript_EffectChillyReceptionBlockedByPrimalRain: + call BattleScript_EffectChillyReceptionTrySwitchWeatherFailed + call BattleScript_NoReliefFromHeavyRainRet + goto BattleScript_MoveSwitch +BattleScript_EffectChillyReceptionBlockedByStrongWinds: + call BattleScript_EffectChillyReceptionTrySwitchWeatherFailed + call BattleScript_MysteriousAirCurrentBlowsOnRet + goto BattleScript_MoveSwitch +BattleScript_EffectChillyReceptionTrySwitchWeatherFailed: + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_FailedFromAtkString + call BattleScript_EffectChillyReceptionPlayAnimation + return + +BattleScript_CheckPrimalWeather: + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn + return + +BattleScript_MoveSwitch: + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_MoveSwitchEnd + printstring STRINGID_PKMNWENTBACK + waitmessage B_WAIT_TIME_SHORT +BattleScript_MoveSwitchOpenPartyScreen: + openpartyscreen BS_ATTACKER, BattleScript_MoveSwitchEnd + switchoutabilities BS_ATTACKER + waitstate + switchhandleorder BS_ATTACKER, 2 + returntoball BS_ATTACKER, FALSE + getswitchedmondata BS_ATTACKER + switchindataupdate BS_ATTACKER + hpthresholds BS_ATTACKER + trytoclearprimalweather + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + printstring STRINGID_SWITCHINMON + switchinanim BS_ATTACKER, TRUE + waitstate + switchineffects BS_ATTACKER +BattleScript_MoveSwitchEnd: + end + +BattleScript_EffectPledge:: + attackcanceler + setpledge BattleScript_HitFromAccCheck + attackstring + pause B_WAIT_TIME_MED + ppreduce + printstring STRINGID_WAITINGFORPARTNERSMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectCombinedPledge_Water:: + call BattleScript_EffectHit_Pledge + setpledgestatus BS_ATTACKER, SIDE_STATUS_RAINBOW + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_ARAINBOWAPPEAREDONSIDE + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE @ TODO animation: B_ANIM_RAINBOW + waitanimation + goto BattleScript_MoveEnd + +BattleScript_TheRainbowDisappeared:: + printstring STRINGID_THERAINBOWDISAPPEARED + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectCombinedPledge_Fire:: + call BattleScript_EffectHit_Pledge + setpledgestatus BS_TARGET, SIDE_STATUS_SEA_OF_FIRE + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_SEAOFFIREENVELOPEDSIDE + waitmessage B_WAIT_TIME_LONG + playanimation BS_TARGET, B_ANIM_STATS_CHANGE @ TODO animation: B_ANIM_SEA_OF_FIRE + waitanimation + goto BattleScript_MoveEnd + +BattleScript_HurtByTheSeaOfFire:: + printstring STRINGID_HURTBYTHESEAOFFIRE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_DoTurnDmg + +BattleScript_TheSeaOfFireDisappeared:: + printstring STRINGID_THESEAOFFIREDISAPPEARED + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectCombinedPledge_Grass:: + call BattleScript_EffectHit_Pledge + setpledgestatus BS_TARGET, SIDE_STATUS_SWAMP + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_SWAMPENVELOPEDSIDE + waitmessage B_WAIT_TIME_LONG + playanimation BS_TARGET, B_ANIM_STATS_CHANGE @ TODO: animation B_ANIM_SWAMP + waitanimation + goto BattleScript_MoveEnd + +BattleScript_TheSwampDisappeared:: + printstring STRINGID_THESWAMPDISAPPEARED + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectHit_Pledge:: + pause B_WAIT_TIME_MED + printstring STRINGID_THETWOMOVESBECOMEONE + waitmessage B_WAIT_TIME_LONG + call BattleScript_EffectHit_RetFromAccCheck + tryfaintmon BS_TARGET + return + +BattleScript_EffectSaltCure:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + jumpiffainted BS_TARGET, TRUE, BattleScript_EffectSaltCure_End + applysaltcure BS_TARGET + printstring STRINGID_TARGETISBEINGSALTCURED + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectSaltCure_End: + goto BattleScript_MoveEnd + +BattleScript_SaltCureExtraDamage:: + playanimation BS_TARGET, B_ANIM_MON_HIT, NULL @ TODO: animation B_ANIM_SALT_CURE_DAMAGE, NULL + waitanimation + call BattleScript_HurtTarget_NoString + printstring STRINGID_TARGETISHURTBYSALTCURE + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_HurtTarget_NoString: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + tryfaintmon BS_TARGET + return + +BattleScript_EffectCorrosiveGas:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifsubstituteblocks BattleScript_CorrosiveGasFail + jumpifcantloseitem BS_TARGET, BattleScript_CorrosiveGasFail + attackanimation + waitanimation + jumpifability BS_TARGET, ABILITY_STICKY_HOLD, BattleScript_StickyHoldActivates + setlastuseditem BS_TARGET + removeitem BS_TARGET + printstring STRINGID_PKMNITEMMELTED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_CorrosiveGasFail: + pause B_WAIT_TIME_SHORT + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + printstring STRINGID_NOEFFECTONTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTakeHeart:: + attackcanceler + attackstring + ppreduce + cureifburnedparalysedorpoisoned BattleScript_CalmMindTryToRaiseStats + attackanimation + waitanimation + updatestatusicon BS_ATTACKER + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CalmMindStatRaise + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CalmMindStatRaise + goto BattleScript_CantRaiseMultipleStats + +BattleScript_EffectRevivalBlessing:: + attackcanceler + attackstring + ppreduce + tryrevivalblessing BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNREVIVEDREADYTOFIGHT + waitmessage B_WAIT_TIME_LONG + jumpifbyte CMP_EQUAL, gBattleCommunication, TRUE, BattleScript_EffectRevivalBlessingSendOut + goto BattleScript_MoveEnd + +BattleScript_EffectRevivalBlessingSendOut: + switchinanim BS_SCRIPTING, FALSE + waitstate + switchineffects BS_SCRIPTING + goto BattleScript_MoveEnd + +BattleScript_StealthRockActivates:: + setstealthrock BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SpikesActivates:: + trysetspikes BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectAttackUpUserAlly:: + jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectAttackUpUserAlly_Works + jumpifstat BS_ATTACKER_PARTNER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed +BattleScript_EffectAttackUpUserAlly_Works: + attackanimation + waitanimation + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_TryAlly + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAllyUser_PrintString + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_EffectAttackUpUserAllyUser_PrintString: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectAttackUpUserAlly_TryAlly: + setallytonexttarget BattleScript_EffectAttackUpUserAlly_TryAlly_ +BattleScript_EffectAttackUpUserAlly_End: + goto BattleScript_MoveEnd +BattleScript_EffectAttackUpUserAlly_TryAlly_: + jumpifability BS_ATTACKER_PARTNER, ABILITY_SOUNDPROOF, BattleScript_EffectAttackUpUserAlly_TryAllyBlocked + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAlly_AllyAnim + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End +BattleScript_EffectAttackUpUserAlly_AllyAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End + +BattleScript_EffectAttackUpUserAlly_TryAllyBlocked: + copybyte sBATTLER, gBattlerTarget + call BattleScript_AbilityPopUpTarget + printstring STRINGID_PKMNSXBLOCKSY2 + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTeatime:: + attackcanceler + attackstring + ppreduce + jumpifteanoberry BattleScript_ButItFailed +@ at least one battler is affected + attackanimation + waitanimation + setbyte gBattlerTarget, 0 +BattleScript_TeatimeLoop: + jumpifrodaffected BS_TARGET, BattleScript_Teatimerod + jumpifabsorbaffected BS_TARGET, BattleScript_Teatimesorb + jumpifmotoraffected BS_TARGET, BattleScript_Teatimemotor + jumpifteainvulnerable BS_TARGET, BattleScript_Teatimevul @ in semi-invulnerable state OR held item is not a Berry + orword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE + setbyte sBERRY_OVERRIDE, TRUE @ override the requirements for eating berries + consumeberry BS_TARGET, TRUE @ consume the berry, then restore the item from changedItems + bicword gHitMarker, HITMARKER_DISABLE_ANIMATION | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE + setbyte sBERRY_OVERRIDE, FALSE + removeitem BS_TARGET + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimevul: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimesorb: + call BattleScript_AbilityPopUpTarget + tryhealquarterhealth BS_TARGET BattleScript_Teatimesorb_end + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_Teatimesorb_end: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimerod: + call BattleScript_AbilityPopUpTarget + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer + printfromtable gStatUpStringIds + waitmessage 0x40 + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_Teatimemotor: + call BattleScript_AbilityPopUpTarget + playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer + printfromtable gStatUpStringIds + waitmessage 0x40 + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd +BattleScript_TeatimeBuffer: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_TeatimeLoop + moveendcase MOVEEND_CLEAR_BITS + goto BattleScript_MoveEnd + +BattleScript_AffectionBasedEndurance:: + playanimation BS_TARGET, B_ANIM_MON_HIT @ TODO animation: B_ANIM_AFFECTION_HANGED_ON + printstring STRINGID_TARGETTOUGHEDITOUT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AffectionBasedStatusHeal:: + jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AffectionBasedStatus_HealPoisonString + jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_AffectionBasedStatus_HealSleepString + jumpifstatus BS_ATTACKER, STATUS1_PARALYSIS, BattleScript_AffectionBasedStatus_HealParalysisString + jumpifstatus BS_ATTACKER, STATUS1_BURN, BattleScript_AffectionBasedStatus_HealBurnString + jumpifstatus BS_ATTACKER, STATUS1_FREEZE, BattleScript_AffectionBasedStatus_HealFreezeString + jumpifstatus BS_ATTACKER, STATUS1_FROSTBITE, BattleScript_AffectionBasedStatus_HealFrostbiteString + end2 +BattleScript_AffectionBasedStatus_HealPoisonString: + printstring STRINGID_ATTACKEREXPELLEDTHEPOISON + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealSleepString: + printstring STRINGID_ATTACKERSHOOKITSELFAWAKE + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealParalysisString: + printstring STRINGID_ATTACKERBROKETHROUGHPARALYSIS + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealBurnString: + printstring STRINGID_ATTACKERHEALEDITSBURN + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealFreezeString: + printstring STRINGID_ATTACKERMELTEDTHEICE + goto BattleScript_AffectionBasedStatusHeal_Continue +BattleScript_AffectionBasedStatus_HealFrostbiteString: + printstring STRINGID_ATTACKERMELTEDTHEICE +BattleScript_AffectionBasedStatusHeal_Continue: + waitmessage B_WAIT_TIME_LONG + clearstatus BS_ATTACKER + waitstate + updatestatusicon BS_ATTACKER + waitstate + end2 + +BattleScript_ShellTrapSetUp:: + flushtextbox + playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO: animation B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_PREPARESHELLTRAP + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_EffectShellTrap:: + attackcanceler + jumpifshelltrap BS_ATTACKER, BattleScript_HitFromAccCheck + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_MoveEnd + ppreduce + printstring STRINGID_SHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMaxHp50Recoil:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_SteelBeamMiss, ACC_CURR_MOVE + call BattleScript_EffectHit_RetFromCritCalc + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_SteelBeamAfterSelfDamage + call BattleScript_SteelBeamSelfDamage +BattleScript_SteelBeamAfterSelfDamage:: + waitstate + tryfaintmon BS_ATTACKER + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd +BattleScript_SteelBeamMiss:: + pause B_WAIT_TIME_SHORT + effectivenesssound + resultmessage + waitmessage B_WAIT_TIME_LONG + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_MoveEnd + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED + call BattleScript_SteelBeamSelfDamage + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED + goto BattleScript_SteelBeamAfterSelfDamage + +BattleScript_SteelBeamSelfDamage:: + dmg_1_2_attackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + return + +BattleScript_EffectCourtChange:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + swapsidestatuses + attackanimation + waitanimation + printstring STRINGID_COURTCHANGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_BeakBlastSetUp:: + setbeakblast BS_ATTACKER + flushtextbox + playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO animation: B_ANIM_BEAK_BLAST_SETUP, NULL + printstring STRINGID_HEATUPBEAK + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_BeakBlastBurn:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectBurn + return + +BattleScript_EffectSkyDrop:: + attackcanceler + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_SkyDropTurn2 + ppreduce + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + jumpifsubstituteblocks BattleScript_ButItFailed + jumpiftargetally BattleScript_ButItFailed + jumpifunder200 BS_TARGET, BattleScript_SkyDropWork + pause B_WAIT_TIME_SHORT + printstring STRINGID_TARGETTOOHEAVY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SkyDropWork: + setskydrop + call BattleScript_FirstChargingTurnAfterAttackString + goto BattleScript_MoveEnd +BattleScript_SkyDropTurn2: + call BattleScript_TwoTurnMovesSecondTurnRet + attackstring + clearskydrop BattleScript_SkyDropChangedTarget + jumpiftype BS_TARGET, TYPE_FLYING, BattleScript_SkyDropFlyingType + goto BattleScript_HitFromCritCalc +BattleScript_SkyDropFlyingType: + makevisible BS_TARGET + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + makevisible BS_ATTACKER + jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_SkyDropFlyingAlreadyConfused + jumpifstatus2 BS_TARGET, STATUS2_LOCK_CONFUSE, BattleScript_SkyDropFlyingConfuseLock + goto BattleScript_MoveEnd +BattleScript_SkyDropChangedTarget: + pause B_WAIT_TIME_SHORT + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + resultmessage + waitmessage B_WAIT_TIME_LONG + makevisible BS_ATTACKER + goto BattleScript_MoveEnd + +BattleScript_SkyDropFlyingConfuseLock: + seteffectprimary MOVE_EFFECT_CONFUSION +BattleScript_SkyDropFlyingAlreadyConfused: + clearstatusfromeffect BS_TARGET, MOVE_EFFECT_THRASH + jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_MoveEnd + setbyte BS_ATTACKER, BS_TARGET + goto BattleScript_ThrashConfuses + +BattleScript_EffectFling:: + attackcanceler + jumpifcantfling BS_ATTACKER, BattleScript_FailedFromAtkString + setlastuseditem BS_ATTACKER + accuracycheck BattleScript_FlingMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNFLUNG + waitmessage B_WAIT_TIME_SHORT + ppreduce + critcalc + damagecalc + adjustdamage + removeitem BS_ATTACKER + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_MED + resultmessage + waitmessage B_WAIT_TIME_MED + jumpiflastuseditemberry BattleScript_EffectFlingConsumeBerry + jumpifability BS_TARGET, ABILITY_SHIELD_DUST, BattleScript_FlingBlockedByShieldDust + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLAME_ORB, BattleScript_FlingFlameOrb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_FLINCH, BattleScript_FlingFlinch + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_LIGHT_BALL, BattleScript_FlingLightBall + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_MENTAL_HERB, BattleScript_FlingMentalHerb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_POISON_POWER, BattleScript_FlingPoisonBarb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_TOXIC_ORB, BattleScript_FlingToxicOrb + jumpiflastuseditemholdeffect BS_ATTACKER, HOLD_EFFECT_RESTORE_STATS, BattleScript_FlingWhiteHerb + goto BattleScript_FlingEnd +BattleScript_EffectFlingConsumeBerry: + savebattleritem BS_TARGET + battleritemtolastuseditem BS_TARGET + setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries + orword gHitMarker, HITMARKER_DISABLE_ANIMATION + consumeberry BS_TARGET, TRUE + bicword gHitMarker, HITMARKER_DISABLE_ANIMATION + setbyte sBERRY_OVERRIDE, 0 + restorebattleritem BS_TARGET +BattleScript_FlingEnd: + tryfaintmon BS_TARGET + trysymbiosis + goto BattleScript_MoveEnd + +BattleScript_FlingFailConsumeItem:: + removeitem BS_ATTACKER + goto BattleScript_FailedFromAtkString + +BattleScript_FlingBlockedByShieldDust:: + printstring STRINGID_ITEMWASUSEDUP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_FlingEnd + +BattleScript_FlingFlameOrb: + seteffectsecondary MOVE_EFFECT_BURN + goto BattleScript_FlingEnd +BattleScript_FlingFlinch: + seteffectsecondary MOVE_EFFECT_FLINCH + goto BattleScript_FlingEnd +BattleScript_FlingLightBall: + seteffectsecondary MOVE_EFFECT_PARALYSIS + goto BattleScript_FlingEnd +BattleScript_FlingMentalHerb: + curecertainstatuses BS_TARGET + savetarget + copybyte gBattlerAttacker, gBattlerTarget + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, NULL + printfromtable gMentalHerbCureStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + restoretarget + goto BattleScript_FlingEnd +BattleScript_FlingPoisonBarb: + seteffectsecondary MOVE_EFFECT_POISON + goto BattleScript_FlingEnd +BattleScript_FlingToxicOrb: + seteffectsecondary MOVE_EFFECT_TOXIC + goto BattleScript_FlingEnd +BattleScript_FlingWhiteHerb: + tryresetnegativestatstages BS_TARGET + swapattackerwithtarget + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_MED + swapattackerwithtarget + goto BattleScript_FlingEnd + +BattleScript_FlingMissed: + removeitem BS_ATTACKER + attackstring + ppreduce + goto BattleScript_MoveMissedPause + +BattleScript_EffectShellSideArm:: + shellsidearmcheck + goto BattleScript_EffectHit + +BattleScript_EffectPhotonGeyser:: + setphotongeysercategory + goto BattleScript_EffectHit + +BattleScript_EffectAuraWheel:: @ Aura Wheel can only be used by Morpeko + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_FULL_BELLY, BattleScript_EffectHit + jumpifspecies BS_ATTACKER, SPECIES_MORPEKO_HANGRY, BattleScript_EffectHit + goto BattleScript_PokemonCantUseTheMove + +BattleScript_EffectClangorousSoul:: + attackcanceler + attackstring + ppreduce + cutonethirdhpraisestats BattleScript_ButItFailed + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_BIDE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + attackanimation + waitanimation + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + call BattleScript_AllStatsUp + goto BattleScript_MoveEnd + +BattleScript_EffectOctolock:: + attackcanceler + jumpifsubstituteblocks BattleScript_FailedFromAtkString + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trysetoctolock BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_OctolockEndTurn:: + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef +BattleScript_OctolockTryLowerDef: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_OctolockTryLowerSpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd +BattleScript_OctolockTurnDmgPrintMsg: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_OctlockTurnDmgEnd: + end2 + +BattleScript_EffectPoltergeist:: + attackcanceler + attackstring + ppreduce + checkpoltergeist BS_TARGET, BattleScript_ButItFailed + printstring STRINGID_ABOUTTOUSEPOLTERGEIST + waitmessage B_WAIT_TIME_LONG + goto BattleScript_HitFromCritCalc + +BattleScript_EffectTarShot:: + attackcanceler + jumpifsubstituteblocks BattleScript_FailedFromAtkString + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + cantarshotwork BS_TARGET, BattleScript_FailedFromAtkString + attackstring + ppreduce + setstatchanger STAT_SPEED, 1, TRUE + attackanimation + waitanimation + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TryTarShot + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_TryTarShot: + trytarshot BS_TARGET, BattleScript_MoveEnd + printstring STRINGID_PKMNBECAMEWEAKERTOFIRE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectNoRetreat:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trynoretreat BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + call BattleScript_AllStatsUp + jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_MoveEnd + seteffectprimary MOVE_EFFECT_PREVENT_ESCAPE | MOVE_EFFECT_AFFECTS_USER + printstring STRINGID_CANTESCAPEDUETOUSEDMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_BothCanNoLongerEscape:: + printstring STRINGID_BOTHCANNOLONGERESCAPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectHyperspaceFury:: + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_CONFINED, BattleScript_ButHoopaCantUseIt + goto BattleScript_PokemonCantUseTheMove + +BattleScript_EffectHyperspaceFuryUnbound:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + pause B_WAIT_TIME_LONG + ppreduce + seteffectprimary MOVE_EFFECT_FEINT + goto BattleScript_HitFromCritCalc + +BattleScript_ButHoopaCantUseIt: + printstring STRINGID_BUTHOOPACANTUSEIT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_HyperspaceFuryRemoveProtect:: + printstring STRINGID_BROKETHROUGHPROTECTION + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectPlasmaFists:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + orword gFieldStatuses, STATUS_FIELD_ION_DELUGE + printstring STRINGID_IONDELUGEON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSparklySwirl:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + healpartystatus + waitstate + updatestatusicon BS_ATTACKER_WITH_PARTNER + waitstate + goto BattleScript_MoveEnd + +BattleScript_EffectFreezyFrost:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + normalisebuffs + printstring STRINGID_STATCHANGESGONE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSappySeed:: + jumpifstatus3 BS_TARGET, STATUS3_LEECHSEED, BattleScript_EffectHit + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + jumpifhasnohp BS_TARGET, BattleScript_MoveEnd + setseeded + printfromtable gLeechSeedStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectBaddyBad:: + jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_REFLECT, BattleScript_EffectHit + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + setreflect + printfromtable gReflectLightScreenSafeguardStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGlitzyGlow:: + jumpifsideaffecting BS_ATTACKER, SIDE_STATUS_LIGHTSCREEN, BattleScript_EffectHit + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + setlightscreen + printfromtable gReflectLightScreenSafeguardStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStuffCheeks:: + attackcanceler + attackstring + ppreduce + jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation +BattleScript_StuffCheeksEatBerry: + setbyte sBERRY_OVERRIDE, 1 + orword gHitMarker, HITMARKER_DISABLE_ANIMATION + consumeberry BS_ATTACKER, TRUE + bicword gHitMarker, HITMARKER_DISABLE_ANIMATION + setbyte sBERRY_OVERRIDE, 0 + removeitem BS_ATTACKER + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StuffCheeksEnd + setgraphicalstatchangevalues + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StuffCheeksEnd @ cant raise def + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StuffCheeksEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectDecorate:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 12, BattleScript_DecorateBoost + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 12, BattleScript_DecorateBoost + goto BattleScript_ButItFailed +BattleScript_DecorateBoost: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0x0 + setstatchanger STAT_ATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_DecorateBoostSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_DecorateBoostSpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DecorateBoostSpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectCoaching:: + attackcanceler + attackstring + ppreduce + jumpifnoally BS_ATTACKER, BattleScript_ButItFailed + copybyte gBattlerTarget, gBattlerAttacker + setallytonexttarget EffectCoaching_CheckAllyStats + goto BattleScript_ButItFailed +EffectCoaching_CheckAllyStats: + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoachingWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoachingWorks + goto BattleScript_ButItFailed @ ally at max atk, def +BattleScript_CoachingWorks: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_DEF, 0x0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CoachingBoostDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_CoachingBoostDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoachingBoostDef: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_MoveEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectJungleHealing:: + attackcanceler + attackstring + ppreduce + jumpifteamhealthy BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation + copybyte gBattlerTarget, gBattlerAttacker + setbyte gBattleCommunication, 0 +JungleHealing_RestoreTargetHealth: + copybyte gBattlerAttacker, gBattlerTarget + tryhealquarterhealth BS_TARGET, BattleScript_JungleHealing_TryCureStatus + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_JungleHealing_TryCureStatus: + jumpifmove MOVE_LIFE_DEW, BattleScript_JungleHealingTryRestoreAlly @ life dew only heals + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_JungleHealingCureStatus + goto BattleScript_JungleHealingTryRestoreAlly +BattleScript_JungleHealingCureStatus: + curestatus BS_TARGET + updatestatusicon BS_TARGET + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG +BattleScript_JungleHealingTryRestoreAlly: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_MoveEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_MoveEnd + setallytonexttarget JungleHealing_RestoreTargetHealth + goto BattleScript_MoveEnd + +BattleScript_EffectRelicSong:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + moveendall + tryrelicsong + end + +BattleScript_EffectAllySwitch:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifnoally BS_ATTACKER, BattleScript_ButItFailed + allyswitchfailchance BattleScript_ButItFailed + attackanimation + waitanimation + @ The actual data/gfx swap happens in the move animation. Here it's just the gBattlerAttacker / scripting battler change + allyswitchswapbattlers + printstring STRINGID_ALLYSWITCHPOSITION + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFairyLock:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trysetfairylock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_NOONEWILLBEABLETORUNAWAY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_FailIfNotArgType:: + attackcanceler + attackstring + ppreduce + jumpifnotcurrentmoveargtype BS_ATTACKER, BattleScript_ButItFailed + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc + +BattleScript_RemoveFireType:: + printstring STRINGID_ATTACKERLOSTFIRETYPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_RemoveElectricType:: + printstring STRINGID_ATTACKERLOSTELECTRICTYPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_RemoveGenericType:: + printstring STRINGID_ATTACKERLOSTITSTYPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_DefDown:: + modifybattlerstatstage BS_TARGET, STAT_DEF, DECREASE, 1, BattleScript_DefDown_Ret, ANIM_ON +BattleScript_DefDown_Ret: + return + +BattleScript_EffectPurify:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_PurifyWorks + goto BattleScript_ButItFailed +BattleScript_PurifyWorks: + attackanimation + waitanimation + curestatus BS_TARGET + updatestatusicon BS_TARGET + printstring STRINGID_ATTACKERCUREDTARGETSTATUS + waitmessage B_WAIT_TIME_LONG + tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER + goto BattleScript_RestoreHp + +BattleScript_EffectStrengthSap:: + setstatchanger STAT_ATK, 1, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_FailedFromAtkString + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, MIN_STAT_STAGE, BattleScript_StrengthSapTryLower + pause B_WAIT_TIME_SHORT + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_StrengthSapTryLower: + getstatvalue BS_TARGET, STAT_ATK + jumpiffullhp BS_ATTACKER, BattleScript_StrengthSapMustLower + attackanimation + waitanimation + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StrengthSapHp + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StrengthSapHp +BattleScript_StrengthSapLower: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_StrengthSapHp +@ Drain HP without lowering a stat +BattleScript_StrengthSapTryHp: + jumpiffullhp BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation +BattleScript_StrengthSapHp: + jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd + jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd +BattleScript_StrengthSapManipulateDmg: + manipulatedamage DMG_BIG_ROOT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapLiquidOoze + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_PKMNENERGYDRAINED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_StrengthSapLiquidOoze: + call BattleScript_AbilityPopUpTarget + manipulatedamage DMG_CHANGE_SIGN + setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printfromtable gAbsorbDrainStringIds + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + goto BattleScript_MoveEnd +BattleScript_StrengthSapMustLower: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_MoveEnd + attackanimation + waitanimation + goto BattleScript_StrengthSapLower + +BattleScript_MoveEffectIncinerate:: + printstring STRINGID_INCINERATEBURN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MoveEffectBugBite:: + printstring STRINGID_BUGBITE + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_DISABLE_ANIMATION + setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries + savetarget + consumeberry BS_ATTACKER, FALSE + bicword gHitMarker, HITMARKER_DISABLE_ANIMATION + setbyte sBERRY_OVERRIDE, 0 + trysymbiosis + restoretarget + return + +BattleScript_MoveEffectCoreEnforcer:: + setgastroacid BattleScript_CoreEnforcerRet + printstring STRINGID_PKMNSABILITYSUPPRESSED + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + tryrevertweatherform + flushtextbox +BattleScript_CoreEnforcerRet: + return + +BattleScript_EffectLaserFocus:: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_LASER_FOCUS, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_LASERFOCUS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_VCreateStatLoss:: + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_VCreateStatLossRet +BattleScript_VCreateStatAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpDef + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateTrySpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateTrySpeed: + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateStatLossRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateStatLossRet + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VCreateStatLossRet: + return + +BattleScript_SpectralThiefSteal:: + printstring STRINGID_SPECTRALTHIEFSTEAL + waitmessage B_WAIT_TIME_LONG + setbyte sB_ANIM_ARG2, 0 + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + spectralthiefprintstats + return + +BattleScript_EffectPartingShot:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_EffectPartingShotTryAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_EffectPartingShotTryAtk: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotTrySpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectPartingShotTrySpAtk: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectPartingShotSwitch + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectPartingShotSwitch: + moveendall + goto BattleScript_MoveSwitch +BattleScript_PartingShotEnd: + end + +BattleScript_EffectPowder:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + jumpifstatus2 BS_TARGET, STATUS2_POWDER, BattleScript_ButItFailed + setpowder BS_TARGET + attackanimation + waitanimation + printstring STRINGID_COVEREDINPOWDER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectAromaticMist:: + attackcanceler + attackstring + ppreduce + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_ButItFailed + jumpiftargetally BattleScript_EffectAromaticMistWorks + goto BattleScript_ButItFailed +BattleScript_EffectAromaticMistWorks: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAromaticMistEnd + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AromaticMistAnim + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAromaticMistEnd +BattleScript_AromaticMistAnim: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectAromaticMistEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectMagneticFlux:: + attackcanceler + attackstring + ppreduce + setbyte gBattleCommunication, 0 +BattleScript_EffectMagneticFluxStart: + jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectMagneticFluxCheckStats + jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectMagneticFluxCheckStats + goto BattleScript_EffectMagneticFluxLoop +BattleScript_EffectMagneticFluxCheckStats: + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxTryDef + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectMagneticFluxLoop +BattleScript_EffectMagneticFluxTryDef: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectMagneticFluxSkipAnim + attackanimation + waitanimation +BattleScript_EffectMagneticFluxSkipAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_DEF | BIT_SPDEF, 0 + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxTrySpDef + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectMagneticFluxTrySpDef: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectMagneticFluxLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectMagneticFluxLoop + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectMagneticFluxLoop: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectMagneticFluxEnd + setallytonexttarget BattleScript_EffectMagneticFluxStart +BattleScript_EffectMagneticFluxEnd: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd + goto BattleScript_ButItFailed + +BattleScript_EffectGearUp:: + attackcanceler + attackstring + ppreduce + setbyte gBattleCommunication, 0 +BattleScript_EffectGearUpStart: + jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectGearUpCheckStats + jumpifability BS_TARGET, ABILITY_PLUS, BattleScript_EffectGearUpCheckStats + goto BattleScript_EffectGearUpLoop +BattleScript_EffectGearUpCheckStats: + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectGearUpTryAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_EffectGearUpLoop +BattleScript_EffectGearUpTryAtk: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_EffectGearUpSkipAnim + attackanimation + waitanimation +BattleScript_EffectGearUpSkipAnim: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpTrySpAtk + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectGearUpTrySpAtk: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectGearUpLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectGearUpLoop + addbyte gBattleCommunication, 1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectGearUpLoop: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectGearUpEnd + setallytonexttarget BattleScript_EffectGearUpStart +BattleScript_EffectGearUpEnd: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd + goto BattleScript_ButItFailed + +BattleScript_EffectAcupressure:: + attackcanceler + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectAcupressureTry + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_PrintMoveMissed +BattleScript_EffectAcupressureTry: + attackstring + ppreduce + tryaccupressure BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + statbuffchange MOVE_EFFECT_CERTAIN, BattleScript_MoveEnd + printstring STRINGID_DEFENDERSSTATROSE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_MoveEffectFeint:: + printstring STRINGID_FELLFORFEINT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectThirdType:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + trysetthirdtype BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_THIRDTYPEADDED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFlowerShield:: + attackcanceler + attackstring + ppreduce + selectfirstvalidtarget +BattleScript_FlowerShieldIsAnyGrass: + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoopStart + jumpifnexttargetvalid BattleScript_FlowerShieldIsAnyGrass + goto BattleScript_ButItFailed +BattleScript_FlowerShieldLoopStart: + selectfirstvalidtarget +BattleScript_FlowerShieldLoop: + movevaluescleanup + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_FlowerShieldLoop2 + goto BattleScript_FlowerShieldMoveTargetEnd +BattleScript_FlowerShieldLoop2: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_FlowerShieldMoveTargetEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_FlowerShieldDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_FlowerShieldMoveTargetEnd + pause 21 + goto BattleScript_FlowerShieldString +BattleScript_FlowerShieldDoAnim: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_FlowerShieldString: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FlowerShieldMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_FlowerShieldLoop + end + +BattleScript_EffectRototiller:: + attackcanceler + attackstring + ppreduce + getrototillertargets BattleScript_ButItFailed + @ at least one battler is affected + attackanimation + waitanimation + savetarget + setbyte gBattlerTarget, 0 +BattleScript_RototillerLoop: + movevaluescleanup + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_RototillerCheckAffected + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_RototillerCantRaiseMultipleStats +BattleScript_RototillerCheckAffected: + jumpifnotrototilleraffected BS_TARGET, BattleScript_RototillerNoEffect +BattleScript_RototillerAffected: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_RototillerTrySpAtk:: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RototillerMoveTargetEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RototillerMoveTargetEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_RototillerMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RototillerLoop + end + +BattleScript_RototillerCantRaiseMultipleStats: + copybyte gBattlerAttacker, gBattlerTarget + printstring STRINGID_STATSWONTINCREASE2 + waitmessage B_WAIT_TIME_LONG + goto BattleScript_RototillerMoveTargetEnd + +BattleScript_RototillerNoEffect: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NOEFFECTONTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_RototillerMoveTargetEnd + +BattleScript_EffectBestow:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + jumpifsubstituteblocks BattleScript_ButItFailed + trybestow BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_BESTOWITEMGIVING + waitmessage B_WAIT_TIME_LONG + trysymbiosis + goto BattleScript_MoveEnd + +BattleScript_EffectAfterYou:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryafteryou BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_KINDOFFER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_MoveEffectFlameBurst:: + tryfaintmon BS_TARGET + copybyte sBATTLER, sSAVED_BATTLER + printstring STRINGID_BURSTINGFLAMESHIT + waitmessage B_WAIT_TIME_LONG + savetarget + copybyte gBattlerTarget, sSAVED_BATTLER + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + tryfaintmon BS_TARGET + restoretarget + goto BattleScript_MoveEnd + +BattleScript_EffectPowerTrick:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + powertrick BS_ATTACKER + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDATKANDDEF + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectPsychoShift:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifstatus BS_ATTACKER, STATUS1_ANY, BattleScript_EffectPsychoShiftCanWork + goto BattleScript_ButItFailed +BattleScript_EffectPsychoShiftCanWork: + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifsafeguard BattleScript_SafeguardProtected + trypsychoshift BattleScript_ButItFailed + attackanimation + waitanimation + copybyte gEffectBattler, gBattlerTarget + printfromtable gStatusConditionsStringIds + waitmessage B_WAIT_TIME_LONG + statusanimation BS_TARGET + updatestatusicon BS_TARGET + curestatus BS_ATTACKER + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + goto BattleScript_MoveEnd + +BattleScript_EffectSynchronoise:: + attackcanceler + attackstring + ppreduce + selectfirstvalidtarget +BattleScript_SynchronoiseLoop: + movevaluescleanup + jumpifcantusesynchronoise BattleScript_SynchronoiseNoEffect + accuracycheck BattleScript_SynchronoiseMissed, ACC_CURR_MOVE + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + flushtextbox + tryfaintmon BS_TARGET +BattleScript_SynchronoiseMoveTargetEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_SynchronoiseLoop + end +BattleScript_SynchronoiseMissed: + pause B_WAIT_TIME_SHORT + resultmessage + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SynchronoiseMoveTargetEnd +BattleScript_SynchronoiseNoEffect: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NOEFFECTONTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_SynchronoiseMoveTargetEnd + +BattleScript_MoveEffectSmackDown:: + printstring STRINGID_FELLSTRAIGHTDOWN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectHitEnemyHealAlly:: + jumpiftargetally BattleScript_EffectHealPulse + goto BattleScript_EffectHit + +BattleScript_EffectDefog:: + setstatchanger STAT_EVASION, 1, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_DefogIfCanClearHazards + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_EVASION, MIN_STAT_STAGE, BattleScript_DefogWorks +BattleScript_DefogIfCanClearHazards: + trydefog FALSE, BattleScript_FailedFromAtkString +BattleScript_DefogWorks: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_DefogTryHazardsWithAnim + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_DefogDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_DefogTryHazardsWithAnim + pause B_WAIT_TIME_SHORT + goto BattleScript_DefogPrintString +BattleScript_DefogDoAnim:: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_DefogPrintString:: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefogTryHazards:: + copybyte gEffectBattler, gBattlerAttacker + trydefog TRUE, NULL + copybyte gBattlerAttacker, gEffectBattler + goto BattleScript_MoveEnd +BattleScript_DefogTryHazardsWithAnim: + attackanimation + waitanimation + goto BattleScript_DefogTryHazards + +BattleScript_EffectCopycat:: + attackcanceler + attackstring + pause 5 + trycopycat BattleScript_CopycatFail + attackanimation + waitanimation + jumptocalledmove TRUE +BattleScript_CopycatFail: + ppreduce + goto BattleScript_ButItFailed + +BattleScript_EffectInstruct:: + attackcanceler + attackstring + ppreduce + pause 5 + tryinstruct BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_USEDINSTRUCTEDMOVE + waitmessage B_WAIT_TIME_LONG + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + jumptocalledmove TRUE + +BattleScript_EffectAutotomize:: + setstatchanger STAT_SPEED, 2, FALSE + attackcanceler + attackstring + ppreduce + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AutotomizeWeightLoss + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AutotomizeAttackAnim + pause B_WAIT_TIME_SHORT + goto BattleScript_AutotomizePrintString +BattleScript_AutotomizeAttackAnim:: + attackanimation + waitanimation +BattleScript_AutotomizeDoAnim:: + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_AutotomizePrintString:: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AutotomizeWeightLoss:: + jumpifmovehadnoeffect BattleScript_MoveEnd + tryautotomize BS_ATTACKER, BattleScript_MoveEnd + printstring STRINGID_BECAMENIMBLE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectFinalGambit:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + dmgtocurrattackerhp + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + resultmessage + waitmessage B_WAIT_TIME_LONG + dmgtocurrattackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + setadditionaleffects + tryfaintmon BS_ATTACKER + tryfaintmon BS_TARGET + jumpifmovehadnoeffect BattleScript_MoveEnd + goto BattleScript_MoveEnd + +BattleScript_EffectHitSwitchTarget:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + jumpiffainted BS_TARGET, TRUE, BattleScript_MoveEnd + jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut + jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpiftargetdynamaxed BattleScript_HitSwitchTargetDynamaxed + tryhitswitchtarget BattleScript_MoveEnd + forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed + goto BattleScript_MoveEnd + +BattleScript_HitSwitchTargetDynamaxed: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG +BattleScript_HitSwitchTargetForceRandomSwitchFailed: + hitswitchtargetfailed + setbyte sSWITCH_CASE, B_SWITCH_NORMAL + goto BattleScript_MoveEnd + +BattleScript_EffectToxicThread:: + setstatchanger STAT_SPEED, 2, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_FailedFromAtkString + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_ToxicThreadWorks + jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_FailedFromAtkString +BattleScript_ToxicThreadWorks: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_ToxicThreadTryPsn + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_ToxicThreadDoAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_ToxicThreadTryPsn + pause B_WAIT_TIME_SHORT + goto BattleScript_ToxicThreadPrintString +BattleScript_ToxicThreadDoAnim:: + attackanimation + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_ToxicThreadPrintString:: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ToxicThreadTryPsn:: + seteffectprimary MOVE_EFFECT_POISON + goto BattleScript_MoveEnd + +BattleScript_EffectVenomDrench:: + attackcanceler + attackstring + ppreduce + jumpifstatus BS_TARGET, STATUS1_PSN_ANY, BattleScript_EffectVenomDrenchCanBeUsed + goto BattleScript_ButItFailed +BattleScript_EffectVenomDrenchCanBeUsed: + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_SPATK, MIN_STAT_STAGE, BattleScript_VenomDrenchDoMoveAnim + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_VenomDrenchDoMoveAnim:: + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchTryLowerSpAtk:: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchTryLowerSpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchTryLowerSpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchTryLowerSpeed:: + playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPEED, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_VenomDrenchEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VenomDrenchEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VenomDrenchEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectNobleRoar:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_NobleRoarDoMoveAnim + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_CantLowerMultipleStats +BattleScript_NobleRoarDoMoveAnim:: + accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS + playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_ATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarTryLowerSpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarTryLowerSpAtk + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_NobleRoarTryLowerSpAtk:: + playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_NEGATIVE + setstatchanger STAT_SPATK, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_NobleRoarEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_NobleRoarEnd + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_NobleRoarEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectShellSmash:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_ShellSmashTryDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed +BattleScript_ShellSmashTryDef:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpDef: + setstatchanger STAT_SPDEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_ShellSmashTryAttack + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTryAttack + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTryAttack: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_ATK | BIT_SPEED, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashTrySpeed: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShellSmashEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShellSmashEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShellSmashEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectLastResort:: + attackcanceler + attackstring + ppreduce + jumpifcantuselastresort BS_ATTACKER, BattleScript_ButItFailed + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc + +BattleScript_EffectGrowth:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_GrowthDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_GrowthDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 + jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthAtk2 + setstatchanger STAT_ATK, 1, FALSE + goto BattleScript_GrowthAtk +BattleScript_GrowthAtk2: + setstatchanger STAT_ATK, 2, FALSE +BattleScript_GrowthAtk: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GrowthTrySpAtk:: + jumpifweatheraffected BS_ATTACKER, B_WEATHER_SUN, BattleScript_GrowthSpAtk2 + setstatchanger STAT_SPATK, 1, FALSE + goto BattleScript_GrowthSpAtk +BattleScript_GrowthSpAtk2: + setstatchanger STAT_SPATK, 2, FALSE +BattleScript_GrowthSpAtk: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GrowthEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GrowthEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GrowthEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectSoak:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifability BS_TARGET, ABILITY_MULTITYPE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_RKS_SYSTEM, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed + attackanimation + waitanimation + trysoak BattleScript_ButItFailed + printstring STRINGID_TARGETCHANGEDTYPE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectReflectType:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryreflecttype BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_REFLECTTARGETSTYPE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectElectrify:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryelectrify BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_TARGETELECTRIFIED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectShiftGear:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ShiftGearDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_ShiftGearDoMoveAnim: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPEED, 10, BattleScript_ShiftGearSpeedBy1 + playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_SPEED, 2, FALSE + goto BattleScript_ShiftGearDoSpeed +BattleScript_ShiftGearSpeedBy1: + playstatchangeanimation BS_ATTACKER, BIT_SPEED | BIT_ATK, 0 + setstatchanger STAT_SPEED, 1, FALSE +BattleScript_ShiftGearDoSpeed: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearTryAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearTryAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShiftGearTryAtk: + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ShiftGearEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_ShiftGearEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ShiftGearEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectCoil:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_CoilDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_CoilDoMoveAnim: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_ACC, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilTryDef: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilTryAcc + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilTryAcc + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilTryAcc: + setstatchanger STAT_ACC, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_CoilEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_CoilEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_CoilEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectQuiverDance:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_QuiverDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_QuiverDanceDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceTrySpDef:: + setstatchanger STAT_SPDEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceTrySpeed:: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_QuiverDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_QuiverDanceEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_QuiverDanceEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectVictoryDance:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_VictoryDanceDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_VictoryDanceDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTryDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceTryDef:: + setstatchanger STAT_DEF, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceTrySpeed:: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_VictoryDanceEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_VictoryDanceEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_VictoryDanceEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectMeFirst:: + attackcanceler + attackstring + trymefirst BattleScript_FailedFromPpReduce + attackanimation + waitanimation + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + jumptocalledmove TRUE + +BattleScript_EffectAttackSpAttackUp:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackSpAttackUpDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_AttackSpAttackUpDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_SPATK, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpTrySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpTrySpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackSpAttackUpTrySpAtk:: + setstatchanger STAT_SPATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackSpAttackUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackSpAttackUpEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackSpAttackUpEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectAttackAccUp:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AttackAccUpDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_ACC, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_AttackAccUpDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0 + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackAccUpTrySpDef:: + setstatchanger STAT_ACC, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackAccUpEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_AttackAccUpEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackAccUpEnd: + goto BattleScript_MoveEnd + +BattleScript_EffectMistyTerrain:: +BattleScript_EffectGrassyTerrain:: +BattleScript_EffectElectricTerrain:: +BattleScript_EffectPsychicTerrain:: + attackcanceler + attackstring + ppreduce + setremoveterrain BattleScript_ButItFailed + attackanimation + waitanimation + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + goto BattleScript_MoveEnd + +BattleScript_EffectTopsyTurvy:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ATK, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_DEF, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPATK, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPDEF, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_ACC, 6, BattleScript_EffectTopsyTurvyWorks + jumpifstat BS_TARGET, CMP_EQUAL, STAT_EVASION, 6, BattleScript_ButItFailed +BattleScript_EffectTopsyTurvyWorks: + attackanimation + waitanimation + invertstatstages BS_TARGET + printstring STRINGID_TOPSYTURVYSWITCHEDSTATS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectIonDeluge:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + orword gFieldStatuses, STATUS_FIELD_ION_DELUGE + attackanimation + waitanimation + printstring STRINGID_IONDELUGEON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectQuash:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryquash BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_QUASHSUCCESS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHealPulse:: + attackcanceler + attackstring + ppreduce + jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents @ stops pollen puff + jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_MoveUsedHealBlockPrevents + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifsubstituteblocks BattleScript_ButItFailed + tryhealpulse BattleScript_AlreadyAtFullHp + attackanimation + waitanimation + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectEntrainment:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryentrainment BattleScript_ButItFailed + attackanimation + waitanimation + setlastusedability BS_TARGET + printstring STRINGID_PKMNACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSimpleBeam:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setabilitysimple BS_TARGET, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNACQUIREDSIMPLE + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + tryrevertweatherform + flushtextbox + tryendneutralizinggas BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectSuckerPunch:: + attackcanceler + suckerpunchcheck BattleScript_FailedFromAtkString + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_HitFromAtkString + +BattleScript_EffectLuckyChant:: + attackcanceler + attackstring + ppreduce + setluckychant BS_ATTACKER, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_SHIELDEDFROMCRITICALHITS + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMetalBurst:: + attackcanceler + metalburstdamagecalculator BattleScript_FailedFromAtkString + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + typecalc + bichalfword gMoveResultFlags, MOVE_RESULT_NOT_VERY_EFFECTIVE | MOVE_RESULT_SUPER_EFFECTIVE + adjustdamage + goto BattleScript_HitFromAtkAnimation + +BattleScript_EffectHealingWish:: + attackcanceler + jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_FailedFromAtkString + attackstring + ppreduce + attackanimation + waitanimation + instanthpdrop BS_ATTACKER + setatkhptozero + tryfaintmon BS_ATTACKER + storehealingwish BS_ATTACKER +.if B_HEALING_WISH_SWITCH <= GEN_4 + openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd + switchoutabilities BS_ATTACKER + waitstate + switchhandleorder BS_ATTACKER, 2 + returnatktoball + getswitchedmondata BS_ATTACKER + switchindataupdate BS_ATTACKER + hpthresholds BS_ATTACKER + trytoclearprimalweather + flushtextbox + printstring STRINGID_SWITCHINMON + switchinanim BS_ATTACKER, TRUE + waitstate + switchineffects BS_ATTACKER +.endif +BattleScript_EffectHealingWishEnd: + moveendall + end + +BattleScript_HealingWishActivates:: + setbyte cMULTISTRING_CHOOSER, 0 + goto BattleScript_EffectHealingWishRestore +BattleScript_LunarDanceActivates:: + setbyte cMULTISTRING_CHOOSER, 1 + restorepp BS_ATTACKER +BattleScript_EffectHealingWishRestore: + printfromtable gHealingWishStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_WISH_HEAL + waitanimation + dmgtomaxattackerhp + manipulatedamage DMG_CHANGE_SIGN + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + clearstatus BS_ATTACKER + waitstate + updatestatusicon BS_ATTACKER + waitstate + printstring STRINGID_HEALINGWISHHEALED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_EffectWorrySeed:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + tryworryseed BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + tryrevertweatherform + flushtextbox + goto BattleScript_MoveEnd + +BattleScript_EffectPowerSplit:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + averagestats STAT_ATK + averagestats STAT_SPATK + attackanimation + waitanimation + printstring STRINGID_SHAREDITSPOWER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGuardSplit:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + averagestats STAT_DEF + averagestats STAT_SPDEF + attackanimation + waitanimation + printstring STRINGID_SHAREDITSGUARD + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHeartSwap:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_ATK + swapstatstages STAT_DEF + swapstatstages STAT_SPEED + swapstatstages STAT_SPATK + swapstatstages STAT_SPDEF + swapstatstages STAT_EVASION + swapstatstages STAT_ACC + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectPowerSwap:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_ATK + swapstatstages STAT_SPATK + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGuardSwap:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstatstages STAT_DEF + swapstatstages STAT_SPDEF + attackanimation + waitanimation + printstring STRINGID_PKMNSWITCHEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSpeedSwap:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + swapstats STAT_SPEED + attackanimation + waitanimation + printstring STRINGID_ATTACKERSWITCHEDSTATWITHTARGET + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTelekinesis:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + ppreduce + settelekinesis BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_HURLEDINTOTHEAIR + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStealthRock:: + attackcanceler + attackstring + ppreduce + setstealthrock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectStickyWeb:: + attackcanceler + attackstring + ppreduce + setstickyweb BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_STICKYWEBUSED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectGastroAcid:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setgastroacid BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNSABILITYSUPPRESSED + waitmessage B_WAIT_TIME_LONG + trytoclearprimalweather + tryrevertweatherform + flushtextbox + tryendneutralizinggas BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_EffectToxicSpikes:: + attackcanceler + attackstring + ppreduce + settoxicspikes BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_POISONSPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectMagnetRise:: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_MAGNET_RISE, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNLEVITATEDONELECTROMAGNETISM + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTrickRoom:: + attackcanceler + attackstring + ppreduce + setroom + attackanimation + waitanimation + printfromtable gRoomsStringIds + waitmessage B_WAIT_TIME_LONG + call BattleScript_TryRoomServiceLoop + goto BattleScript_MoveEnd + +BattleScript_TryRoomServiceLoop: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_RoomServiceLoop: + copybyte sBATTLER, gBattlerTarget + tryroomservice BS_TARGET, BattleScript_RoomServiceLoop_NextBattler + removeitem BS_TARGET +BattleScript_RoomServiceLoop_NextBattler: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RoomServiceLoop + restoretarget + return + +BattleScript_EffectWonderRoom:: +BattleScript_EffectMagicRoom:: + attackcanceler + attackstring + ppreduce + setroom + attackanimation + waitanimation + printfromtable gRoomsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectAquaRing:: + attackcanceler + attackstring + ppreduce + setuserstatus3 STATUS3_AQUA_RING, BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNSURROUNDEDWITHVEILOFWATER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectEmbargo:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setembargo BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNCANTUSEITEMSANYMORE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectTailwind:: + attackcanceler + attackstring + ppreduce + settailwind BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_TAILWINDBLEW + waitmessage B_WAIT_TIME_LONG + call BattleScript_TryTailwindAbilitiesLoop + goto BattleScript_MoveEnd + +BattleScript_TryTailwindAbilitiesLoop: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_TryTailwindAbilitiesLoop_Iter: + trywindriderpower BS_TARGET, BattleScript_TryTailwindAbilitiesLoop_Increment + jumpifability BS_TARGET, ABILITY_WIND_RIDER, BattleScript_TryTailwindAbilitiesLoop_WindRider + jumpifability BS_TARGET, ABILITY_WIND_POWER, BattleScript_TryTailwindAbilitiesLoop_WindPower +BattleScript_TryTailwindAbilitiesLoop_Increment: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TryTailwindAbilitiesLoop_Iter +BattleScript_TryTailwindAbilitiesLoop_Ret: + restoretarget + return + +BattleScript_TryTailwindAbilitiesLoop_WindRider: + call BattleScript_AbilityPopUp + modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_TryTailwindAbilitiesLoop_Increment, ANIM_ON + goto BattleScript_TryTailwindAbilitiesLoop_Increment + +BattleScript_TryTailwindAbilitiesLoop_WindPower: + call BattleScript_AbilityPopUp + setcharge BS_TARGET + printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_TryTailwindAbilitiesLoop_Increment + +BattleScript_EffectMircleEye:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + setmiracleeye BattleScript_ButItFailed + goto BattleScript_IdentifiedFoe + +BattleScript_EffectGravity:: + attackcanceler + attackstring + ppreduce + setgravity BattleScript_ButItFailed + attackanimation + waitanimation +BattleScript_EffectGravitySuccess:: + printstring STRINGID_GRAVITYINTENSIFIED + waitmessage B_WAIT_TIME_LONG + selectfirstvalidtarget +BattleScript_GravityLoop: + movevaluescleanup + jumpifstatus3 BS_TARGET, STATUS3_ON_AIR | STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS, BattleScript_GravityLoopDrop + goto BattleScript_GravityLoopEnd +BattleScript_GravityLoopDrop: + bringdownairbornebattler BS_TARGET + printstring STRINGID_GRAVITYGROUNDING + waitmessage B_WAIT_TIME_LONG +BattleScript_GravityLoopEnd: + moveendto MOVEEND_NEXT_TARGET + jumpifnexttargetvalid BattleScript_GravityLoop + end + +BattleScript_EffectRoost:: + attackcanceler + attackstring + ppreduce + tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_TARGET + setroost + goto BattleScript_PresentHealTarget + +BattleScript_EffectCaptivate:: + setstatchanger STAT_SPATK, 2, TRUE + attackcanceler + jumpifsubstituteblocks BattleScript_FailedFromAtkString + jumpifoppositegenders BattleScript_CaptivateCheckAcc + goto BattleScript_FailedFromAtkString +BattleScript_CaptivateCheckAcc: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + goto BattleScript_StatDownFromAttackString + +BattleScript_EffectHealBlock:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects + sethealblock BattleScript_ButItFailed + attackanimation + waitanimation + printstring STRINGID_PKMNPREVENTEDFROMHEALING + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectHitEscape:: + call BattleScript_EffectHit_Ret + jumpifmovehadnoeffect BattleScript_MoveEnd + jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_MoveEnd + tryfaintmon BS_TARGET + moveendto MOVEEND_ATTACKER_VISIBLE + moveendfrom MOVEEND_TARGET_VISIBLE + jumpifbattleend BattleScript_HitEscapeEnd + jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd + jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd + goto BattleScript_MoveSwitch +BattleScript_HitEscapeEnd: + end + +BattleScript_EffectPlaceholder:: + attackcanceler + attackstring + ppreduce + pause 5 + printstring STRINGID_NOTDONEYET + goto BattleScript_MoveEnd + BattleScript_EffectHit:: BattleScript_HitFromAtkCanceler:: attackcanceler @@ -60,8 +2863,50 @@ BattleScript_MoveEnd:: moveendall end +BattleScript_EffectHit_Ret:: + attackcanceler +BattleScript_EffectHit_RetFromAccCheck:: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce +BattleScript_EffectHit_RetFromCritCalc:: + critcalc + damagecalc + adjustdamage +BattleScript_Hit_RetFromAtkAnimation:: + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + setadditionaleffects + return + +BattleScript_EffectNaturalGift:: + attackcanceler + attackstring + ppreduce + jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed + jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_MAGIC_ROOM, BattleScript_ButItFailed + jumpifability BS_ATTACKER, ABILITY_KLUTZ, BattleScript_ButItFailed + jumpifstatus3 BS_ATTACKER, STATUS3_EMBARGO, BattleScript_ButItFailed + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + call BattleScript_EffectHit_RetFromCritCalc + jumpifmovehadnoeffect BattleScript_EffectNaturalGiftEnd + checkparentalbondcounter 2, BattleScript_EffectNaturalGiftEnd + removeitem BS_ATTACKER +BattleScript_EffectNaturalGiftEnd: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + BattleScript_MakeMoveMissed:: - orbyte gMoveResultFlags, MOVE_RESULT_MISSED + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED BattleScript_PrintMoveMissed:: attackstring ppreduce @@ -73,6 +2918,11 @@ BattleScript_MoveMissed:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_EffectDarkVoid:: +.if B_DARK_VOID_FAIL >= GEN_7 + jumpifspecies BS_ATTACKER, SPECIES_DARKRAI, BattleScript_EffectSleep + goto BattleScript_PokemonCantUseTheMove +.endif BattleScript_EffectSleep:: attackcanceler attackstring @@ -98,28 +2948,116 @@ BattleScript_EffectSleep:: seteffectprimary MOVE_EFFECT_SLEEP goto BattleScript_MoveEnd +BattleScript_TerrainPreventsEnd2:: + pause B_WAIT_TIME_SHORT + printfromtable gTerrainPreventsStringIds + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_ElectricTerrainPrevents:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_ELECTRICTERRAINPREVENTS + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_MistyTerrainPrevents:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MISTYTERRAINPREVENTS + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_FlowerVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_FLOWERVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_FlowerVeilProtects: + call BattleScript_FlowerVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_SweetVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_FLOWERVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SweetVeilProtects: + call BattleScript_SweetVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_AromaVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_AROMAVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AromaVeilProtects: + call BattleScript_AromaVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_PastelVeilProtectsRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PASTELVEILPROTECTED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_PastelVeilProtects: + call BattleScript_PastelVeilProtectsRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_AbilityProtectsDoesntAffectRet:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AbilityProtectsDoesntAffect: + call BattleScript_AbilityProtectsDoesntAffectRet + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + +BattleScript_InsomniaProtects: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSTAYEDAWAKEUSING + waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + BattleScript_AlreadyAsleep:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYASLEEP waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd BattleScript_WasntAffected:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNWASNTAFFECTED waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd BattleScript_CantMakeAsleep:: pause B_WAIT_TIME_SHORT printfromtable gUproarAwakeStringIds waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_EffectPoisonHit:: - setmoveeffect MOVE_EFFECT_POISON - goto BattleScript_EffectHit - BattleScript_EffectAbsorb:: call BattleScript_EffectHit_Ret jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_AbsorbHealBlock @@ -145,39 +3083,19 @@ BattleScript_AbsorbHealBlock:: tryfaintmon BS_TARGET goto BattleScript_MoveEnd -BattleScript_EffectBurnHit:: - setmoveeffect MOVE_EFFECT_BURN - goto BattleScript_EffectHit - -BattleScript_EffectFreezeHit:: - setmoveeffect MOVE_EFFECT_FREEZE - goto BattleScript_EffectHit - -BattleScript_EffectParalyzeHit:: - setmoveeffect MOVE_EFFECT_PARALYSIS - goto BattleScript_EffectHit - -BattleScript_EffectExplosion:: - attackcanceler - attackstring - ppreduce -@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) - tryexplosion - setatkhptozero - waitstate - jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop +BattleScript_EffectExplosion_AnimDmgRet: + jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim - goto BattleScript_ExplosionLoop -BattleScript_ExplosionDoAnimStartLoop: + goto BattleScript_ExplosionDmgRet +BattleScript_ExplosionAnimRet: attackanimation waitanimation -BattleScript_ExplosionLoop: +BattleScript_ExplosionDmgRet: movevaluescleanup critcalc damagecalc - typecalc adjustdamage - accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE + accuracycheck BattleScript_ExplosionMissedRet, ACC_CURR_MOVE effectivenesssound hitanimation BS_TARGET waitstate @@ -188,24 +3106,61 @@ BattleScript_ExplosionLoop: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop - tryfaintmon BS_ATTACKER - end -BattleScript_ExplosionMissed: +BattleScript_ExplosionAnimEndRet_Return: + return +BattleScript_ExplosionMissedRet: effectivenesssound resultmessage waitmessage B_WAIT_TIME_LONG - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop + goto BattleScript_ExplosionAnimEndRet_Return + +BattleScript_EffectExplosion:: + attackcanceler + attackstring + ppreduce +@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) + tryexplosion + waitstate +BattleScript_EffectExplosion_AnimDmgFaintAttacker: + call BattleScript_EffectExplosion_AnimDmgRet + moveendall + setatkhptozero tryfaintmon BS_ATTACKER end +BattleScript_EffectMindBlown:: + attackcanceler + attackstring + ppreduce + jumpifbyte CMP_GREATER_THAN, sB_ANIM_TARGETS_HIT, 0, BattleScript_EffectMindBlown_NoHpLoss + jumpifabilitypresent ABILITY_DAMP, BattleScript_MindBlownDamp + jumpifmorethanhalfHP BS_ATTACKER, BattleScript_EffectMindBlown_HpDown + setbyte sMULTIHIT_EFFECT, 0 @ Note to faint the attacker + instanthpdrop BS_ATTACKER + waitstate + goto BattleScript_EffectExplosion_AnimDmgFaintAttacker +BattleScript_EffectMindBlown_NoHpLoss: + jumpifbyte CMP_EQUAL, sMULTIHIT_EFFECT, 0, BattleScript_EffectExplosion_AnimDmgFaintAttacker + goto BattleScript_EffectMindBlown_AnimDmgNoFaint +BattleScript_MindBlownDamp: + copybyte gBattlerTarget, gBattlerAbility + goto BattleScript_DampStopsExplosion +BattleScript_EffectMindBlown_HpDown: + setbyte sMULTIHIT_EFFECT, 1 @ Note to not faint the attacker + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_EffectMindBlown_AnimDmgNoFaint + dmg_1_2_attackerhp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + waitstate +BattleScript_EffectMindBlown_AnimDmgNoFaint: + call BattleScript_EffectExplosion_AnimDmgRet + goto BattleScript_MoveEnd + BattleScript_PreserveMissedBitDoMoveAnim: - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED attackanimation waitanimation - orbyte gMoveResultFlags, MOVE_RESULT_MISSED + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED return BattleScript_EffectDreamEater:: @@ -255,7 +3210,7 @@ BattleScript_EffectMirrorMove:: pause B_WAIT_TIME_LONG trymirrormove ppreduce - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED printstring STRINGID_MIRRORMOVEFAILED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -272,6 +3227,18 @@ BattleScript_EffectSpecialAttackUp:: setstatchanger STAT_SPATK, 1, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectSpeedUp:: + setstatchanger STAT_SPEED, 1, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectSpecialDefenseUp:: + setstatchanger STAT_SPDEF, 1, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectAccuracyUp:: + setstatchanger STAT_ACC, 1, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectEvasionUp:: setstatchanger STAT_EVASION, 1, FALSE BattleScript_EffectStatUp:: @@ -318,12 +3285,21 @@ BattleScript_EffectAccuracyDown:: setstatchanger STAT_ACC, 1, TRUE goto BattleScript_EffectStatDown +BattleScript_EffectSpecialAttackDown:: + setstatchanger STAT_SPATK, 1, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectSpecialDefenseDown:: + setstatchanger STAT_SPDEF, 1, TRUE + goto BattleScript_EffectStatDown + BattleScript_EffectEvasionDown:: setstatchanger STAT_EVASION, 1, TRUE -BattleScript_EffectStatDown:: +BattleScript_EffectStatDown: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_FailedFromAtkString + jumpifsubstituteblocks BattleScript_FailedFromAtkString accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE +BattleScript_StatDownFromAttackString: attackstring ppreduce statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd @@ -342,6 +3318,34 @@ BattleScript_StatDownPrintString:: BattleScript_StatDownEnd:: goto BattleScript_MoveEnd +BattleScript_MirrorArmorReflect:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss +BattleScript_MirrorArmorReflectStatLoss: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim + goto BattleScript_MirrorArmorReflectWontFall +BattleScript_MirrorArmorReflectAnim: + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_MirrorArmorReflectPrintString: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MirrorArmorReflectEnd: + return + +BattleScript_MirrorArmorReflectWontFall: + copybyte gBattlerTarget, gBattlerAttacker @ STRINGID_STATSWONTDECREASE uses target + goto BattleScript_MirrorArmorReflectPrintString + +@ gBattlerTarget is battler with Mirror Armor +BattleScript_MirrorArmorReflectStickyWeb: + call BattleScript_AbilityPopUp + setattackertostickywebuser + jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss + goto BattleScript_MirrorArmorReflectStatLoss + BattleScript_StatDown:: playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatDownStringIds @@ -373,12 +3377,20 @@ BattleScript_EffectRoar:: attackcanceler attackstring ppreduce + jumpifroarfails BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_ButItFailed jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted + jumpiftargetdynamaxed BattleScript_RoarBlockedByDynamax accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE forcerandomswitch BattleScript_ButItFailed +BattleScript_RoarBlockedByDynamax: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectMultiHit:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -444,10 +3456,6 @@ BattleScript_EffectConversion:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFlinchHit:: - setmoveeffect MOVE_EFFECT_FLINCH - goto BattleScript_EffectHit - BattleScript_EffectRestoreHp:: attackcanceler attackstring @@ -455,6 +3463,7 @@ BattleScript_EffectRestoreHp:: tryhealhalfhealth BattleScript_AlreadyAtFullHp, BS_ATTACKER attackanimation waitanimation +BattleScript_RestoreHp: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -467,23 +3476,28 @@ BattleScript_EffectToxic:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed - jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned - jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifsubstituteblocks BattleScript_ButItFailed + jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed - jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected - jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents + trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation - setmoveeffect MOVE_EFFECT_TOXIC - seteffectprimary + seteffectprimary MOVE_EFFECT_TOXIC resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyPoisoned:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_LONG printstring STRINGID_PKMNALREADYPOISONED waitmessage B_WAIT_TIME_LONG @@ -491,13 +3505,17 @@ BattleScript_AlreadyPoisoned:: BattleScript_ImmunityProtected:: copybyte gEffectBattler, gBattlerTarget + call BattleScript_AbilityPopUp setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS call BattleScript_PSNPrevention goto BattleScript_MoveEnd -BattleScript_EffectPayDay:: - setmoveeffect MOVE_EFFECT_PAYDAY - goto BattleScript_EffectHit +BattleScript_EffectAuroraVeil:: + attackcanceler + attackstring + ppreduce + setauroraveil BS_ATTACKER + goto BattleScript_PrintReflectLightScreenSafeguardString BattleScript_EffectLightScreen:: attackcanceler @@ -506,10 +3524,6 @@ BattleScript_EffectLightScreen:: setlightscreen goto BattleScript_PrintReflectLightScreenSafeguardString -BattleScript_EffectTriAttack:: - setmoveeffect MOVE_EFFECT_TRI_ATTACK - goto BattleScript_EffectHit - BattleScript_EffectRest:: attackcanceler attackstring @@ -538,11 +3552,18 @@ BattleScript_RestCantSleep:: goto BattleScript_MoveEnd BattleScript_RestIsAlreadyAsleep:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYASLEEP2 waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_LeafGuardPreventsRest:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_BUTITFAILED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectOHKO:: attackcanceler attackstring @@ -565,63 +3586,54 @@ BattleScript_EffectSuperFang:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE damagetohalftargethp goto BattleScript_HitFromAtkAnimation -BattleScript_EffectDragonRage:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - setword gBattleMoveDamage, 40 - adjustdamage - goto BattleScript_HitFromAtkAnimation - -BattleScript_EffectTrap:: - jumpifnotmove MOVE_WHIRLPOOL, BattleScript_DoWrapEffect - jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_DoWrapEffect - orword gHitMarker, HITMARKER_IGNORE_UNDERWATER - setbyte sDMG_MULTIPLIER, 2 -BattleScript_DoWrapEffect:: - setmoveeffect MOVE_EFFECT_WRAP - goto BattleScript_EffectHit - -BattleScript_EffectDoubleHit:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - setmultihitcounter 2 - initmultihitstring - setbyte sMULTIHIT_EFFECT, 0 - goto BattleScript_MultiHitLoop - BattleScript_EffectRecoilIfMiss:: attackcanceler accuracycheck BattleScript_MoveMissedDoDamage, ACC_CURR_MOVE +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + typecalc + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveMissedDoDamage +.endif goto BattleScript_HitFromAtkString BattleScript_MoveMissedDoDamage:: + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_PrintMoveMissed attackstring ppreduce pause B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd +.if B_CRASH_IF_TARGET_IMMUNE < GEN_4 + jumpifhalfword CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE, BattleScript_MoveEnd +.endif + moveendcase MOVEEND_PROTECT_LIKE_EFFECT @ Spiky Shield's damage happens before recoil. + jumpifhasnohp BS_ATTACKER, BattleScript_MoveEnd printstring STRINGID_PKMNCRASHED waitmessage B_WAIT_TIME_LONG damagecalc typecalc adjustdamage +.if B_CRASH_IF_TARGET_IMMUNE == GEN_4 + manipulatedamage DMG_RECOIL_FROM_IMMUNE +.else manipulatedamage DMG_RECOIL_FROM_MISS - bicbyte gMoveResultFlags, MOVE_RESULT_MISSED - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE +.endif +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE +.else + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED +.endif + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER - orbyte gMoveResultFlags, MOVE_RESULT_MISSED +.if B_CRASH_IF_TARGET_IMMUNE >= GEN_4 + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE +.else + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED +.endif goto BattleScript_MoveEnd BattleScript_EffectMist:: @@ -639,7 +3651,7 @@ BattleScript_EffectFocusEnergy:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY, BattleScript_ButItFailed + jumpifstatus2 BS_ATTACKER, STATUS2_FOCUS_ENERGY_ANY, BattleScript_ButItFailed setfocusenergy attackanimation waitanimation @@ -652,19 +3664,20 @@ BattleScript_EffectConfuse:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_AlreadyConfused + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation - setmoveeffect MOVE_EFFECT_CONFUSION - seteffectprimary + seteffectprimary MOVE_EFFECT_CONFUSION resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyConfused:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYCONFUSED waitmessage B_WAIT_TIME_LONG @@ -678,6 +3691,10 @@ BattleScript_EffectDefenseUp2:: setstatchanger STAT_DEF, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectDefenseUp3:: + setstatchanger STAT_DEF, 3, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectSpeedUp2:: setstatchanger STAT_SPEED, 2, FALSE goto BattleScript_EffectStatUp @@ -686,14 +3703,28 @@ BattleScript_EffectSpecialAttackUp2:: setstatchanger STAT_SPATK, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectSpecialAttackUp3:: + setstatchanger STAT_SPATK, 3, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectSpecialDefenseUp2:: setstatchanger STAT_SPDEF, 2, FALSE goto BattleScript_EffectStatUp +BattleScript_EffectAccuracyUp2:: + setstatchanger STAT_ACC, 2, FALSE + goto BattleScript_EffectStatUp + +BattleScript_EffectEvasionUp2:: + setstatchanger STAT_EVASION, 2, FALSE + goto BattleScript_EffectStatUp + BattleScript_EffectTransform:: attackcanceler attackstring ppreduce + trytoclearprimalweather + flushtextbox transformdataexecution attackanimation waitanimation @@ -717,6 +3748,18 @@ BattleScript_EffectSpecialDefenseDown2:: setstatchanger STAT_SPDEF, 2, TRUE goto BattleScript_EffectStatDown +BattleScript_EffectSpecialAttackDown2:: + setstatchanger STAT_SPATK, 2, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectAccuracyDown2:: + setstatchanger STAT_ACC, 2, TRUE + goto BattleScript_EffectStatDown + +BattleScript_EffectEvasionDown2:: + setstatchanger STAT_EVASION, 2, TRUE + goto BattleScript_EffectStatDown + BattleScript_EffectReflect:: attackcanceler attackstring @@ -725,6 +3768,7 @@ BattleScript_EffectReflect:: BattleScript_PrintReflectLightScreenSafeguardString:: attackanimation waitanimation +BattleScript_EffectAuroraVeilSuccess:: printfromtable gReflectLightScreenSafeguardStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -734,18 +3778,23 @@ BattleScript_EffectPoison:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned - jumpiftype BS_TARGET, TYPE_POISON, BattleScript_NotAffected - jumpiftype BS_TARGET, TYPE_STEEL, BattleScript_NotAffected + trypoisontype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation - setmoveeffect MOVE_EFFECT_POISON - seteffectprimary + seteffectprimary MOVE_EFFECT_POISON resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -755,22 +3804,37 @@ BattleScript_EffectParalyze:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifsubstituteblocks BattleScript_ButItFailed typecalc +BattleScript_BattleScript_EffectParalyzeNoTypeCalc: jumpifmovehadnoeffect BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed + jumpifabsorbaffected BS_TARGET, BattleScript_VoltAbsorbHeal + tryparalyzetype BS_ATTACKER, BS_TARGET, BattleScript_NotAffected jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE attackanimation waitanimation - setmoveeffect MOVE_EFFECT_PARALYSIS - seteffectprimary + seteffectprimary MOVE_EFFECT_PARALYSIS resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_AlreadyParalyzed:: +BattleScript_VoltAbsorbHeal: + copybyte gBattlerAbility, gBattlerTarget + tryhealquarterhealth BS_TARGET BattleScript_MonMadeMoveUseless @ Check if max hp + goto BattleScript_MoveHPDrain + +BattleScript_AlreadyParalyzed: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNISALREADYPARALYZED waitmessage B_WAIT_TIME_LONG @@ -782,43 +3846,102 @@ BattleScript_LimberProtected:: call BattleScript_PRLZPrevention goto BattleScript_MoveEnd -BattleScript_EffectAttackDownHit:: - setmoveeffect MOVE_EFFECT_ATK_MINUS_1 - goto BattleScript_EffectHit +BattleScript_PowerHerbActivation: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_POWERHERB + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + return -BattleScript_EffectDefenseDownHit:: - setmoveeffect MOVE_EFFECT_DEF_MINUS_1 - goto BattleScript_EffectHit +BattleScript_EffectTwoTurnsAttack:: + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn + tryfiretwoturnmovewithoutcharging BS_ATTACKER, BattleScript_EffectHit @ e.g. Solar Beam + call BattleScript_FirstChargingTurn + tryfiretwoturnmoveaftercharging BS_ATTACKER, BattleScript_TwoTurnMovesSecondTurn @ e.g. Electro Shot + jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates + goto BattleScript_MoveEnd -BattleScript_EffectSpeedDownHit:: - setmoveeffect MOVE_EFFECT_SPD_MINUS_1 - goto BattleScript_EffectHit - -BattleScript_EffectSpecialAttackDownHit:: - setmoveeffect MOVE_EFFECT_SP_ATK_MINUS_1 - goto BattleScript_EffectHit - -BattleScript_EffectSpecialDefenseDownHit:: - setmoveeffect MOVE_EFFECT_SP_DEF_MINUS_1 - goto BattleScript_EffectHit - -BattleScript_EffectAccuracyDownHit:: - setmoveeffect MOVE_EFFECT_ACC_MINUS_1 - goto BattleScript_EffectHit - -BattleScript_EffectConfuseHit:: - setmoveeffect MOVE_EFFECT_CONFUSION - goto BattleScript_EffectHit - -BattleScript_EffectTwineedle:: +BattleScript_EffectGeomancy:: + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_GeomancySecondTurn + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_GeomancySecondTurn + call BattleScript_FirstChargingTurn + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_MoveEnd + call BattleScript_PowerHerbActivation +BattleScript_GeomancySecondTurn: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - setbyte sMULTIHIT_EFFECT, MOVE_EFFECT_POISON + setbyte sB_ANIM_TURN, 1 + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING + orword gHitMarker, HITMARKER_NO_PPDEDUCT attackstring + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_GeomancyDoMoveAnim + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats +BattleScript_GeomancyDoMoveAnim:: + attackanimation + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF | BIT_SPEED, 0 + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyTrySpDef:: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyTrySpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyTrySpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_GeomancyEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_GeomancyEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_GeomancyEnd:: + goto BattleScript_MoveEnd + +BattleScript_FirstChargingTurn:: + attackcanceler +@ before Gen 5, charge moves did not print an attack string on the charge turn +.if B_UPDATED_MOVE_DATA >= GEN_5 + flushtextbox + attackstring + waitmessage B_WAIT_TIME_LONG +.endif ppreduce - setmultihitcounter 2 - initmultihitstring - goto BattleScript_MultiHitLoop +BattleScript_FirstChargingTurnAfterAttackString: + setsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP + orword gHitMarker, HITMARKER_CHARGING + seteffectprimary MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER + twoturnmoveschargestringandanimation + setadditionaleffects @ only onChargeTurnOnly effects will work here + return + +BattleScript_TwoTurnMovesSecondPowerHerbActivates: + call BattleScript_PowerHerbActivation + trygulpmissile @ Edge case for Cramorant ability Gulp Missile +BattleScript_FromTwoTurnMovesSecondTurnRet: + call BattleScript_TwoTurnMovesSecondTurnRet + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE +@ before Gen 5, charge moves did not print an attack string on the charge turn +.if B_UPDATED_MOVE_DATA < GEN_5 + attackstring +.endif + goto BattleScript_HitFromCritCalc + +BattleScript_TwoTurnMovesSecondTurn:: + attackcanceler + call BattleScript_TwoTurnMovesSecondTurnRet + orword gHitMarker, HITMARKER_NO_PPDEDUCT + goto BattleScript_HitFromAccCheck + +BattleScript_TwoTurnMovesSecondTurnRet: + setbyte sB_ANIM_TURN, 1 + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING + clearsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP + return BattleScript_EffectSubstitute:: attackcanceler @@ -827,30 +3950,23 @@ BattleScript_EffectSubstitute:: waitstate jumpifstatus2 BS_ATTACKER, STATUS2_SUBSTITUTE, BattleScript_AlreadyHasSubstitute setsubstitute - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteAnim - pause B_WAIT_TIME_SHORT - goto BattleScript_SubstituteString -BattleScript_SubstituteAnim:: + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SUBSTITUTE_FAILED, BattleScript_SubstituteString attackanimation waitanimation healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER BattleScript_SubstituteString:: + pause B_WAIT_TIME_SHORT printfromtable gSubstituteUsedStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AlreadyHasSubstitute:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNHASSUBSTITUTE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRecharge:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - setmoveeffect MOVE_EFFECT_RECHARGE | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN - goto BattleScript_HitFromAtkString - BattleScript_MoveUsedMustRecharge:: printstring STRINGID_PKMNMUSTRECHARGE waitmessage B_WAIT_TIME_LONG @@ -859,20 +3975,17 @@ BattleScript_MoveUsedMustRecharge:: BattleScript_EffectRage:: attackcanceler accuracycheck BattleScript_RageMiss, ACC_CURR_MOVE - setmoveeffect MOVE_EFFECT_RAGE - seteffectprimary - setmoveeffect 0 + seteffectprimary MOVE_EFFECT_RAGE goto BattleScript_HitFromAtkString BattleScript_RageMiss:: - setmoveeffect MOVE_EFFECT_RAGE - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_RAGE goto BattleScript_PrintMoveMissed BattleScript_EffectMimic:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON mimicattackcopy BattleScript_ButItFailed attackanimation @@ -896,7 +4009,7 @@ BattleScript_EffectLeechSeed:: attackstring pause B_WAIT_TIME_SHORT ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_DoLeechSeed, ACC_CURR_MOVE BattleScript_DoLeechSeed:: setseeded @@ -937,6 +4050,7 @@ BattleScript_EffectDisable:: attackcanceler attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE disablelastusedattack BattleScript_ButItFailed attackanimation @@ -951,7 +4065,7 @@ BattleScript_EffectLevelDamage:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE dmgtolevel adjustdamage goto BattleScript_HitFromAtkAnimation @@ -962,7 +4076,7 @@ BattleScript_EffectPsywave:: attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE psywavedamageeffect adjustdamage goto BattleScript_HitFromAtkAnimation @@ -983,6 +4097,7 @@ BattleScript_EffectEncore:: accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects trysetencore BattleScript_ButItFailed attackanimation waitanimation @@ -1010,6 +4125,7 @@ BattleScript_EffectPainSplit:: BattleScript_EffectSnore:: attackcanceler + jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SnoreIsAsleep jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SnoreIsAsleep attackstring ppreduce @@ -1023,7 +4139,6 @@ BattleScript_DoSnore:: attackstring ppreduce accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE - setmoveeffect MOVE_EFFECT_FLINCH goto BattleScript_HitFromCritCalc BattleScript_EffectConversion2:: @@ -1041,7 +4156,7 @@ BattleScript_EffectLockOn:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE setalwayshitflag attackanimation @@ -1054,7 +4169,6 @@ BattleScript_EffectSketch:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed copymovepermanently BattleScript_ButItFailed attackanimation waitanimation @@ -1064,6 +4178,7 @@ BattleScript_EffectSketch:: BattleScript_EffectSleepTalk:: attackcanceler + jumpifability BS_ATTACKER, ABILITY_COMATOSE, BattleScript_SleepTalkIsAsleep jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_SleepTalkIsAsleep attackstring ppreduce @@ -1096,6 +4211,14 @@ BattleScript_EffectDestinyBond:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_EffectEerieSpell:: + call BattleScript_EffectHit_Ret + tryfaintmon BS_TARGET + eeriespellppreduce BattleScript_MoveEnd + printstring STRINGID_PKMNREDUCEDPP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectSpite:: attackcanceler attackstring @@ -1131,21 +4254,19 @@ BattleScript_PartyHealEnd:: waitstate goto BattleScript_MoveEnd -BattleScript_EffectThief:: - setmoveeffect MOVE_EFFECT_STEAL_ITEM - goto BattleScript_EffectHit - BattleScript_EffectMeanLook:: attackcanceler attackstring ppreduce accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON jumpifstatus2 BS_TARGET, STATUS2_ESCAPE_PREVENTION, BattleScript_ButItFailed - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed +.if B_GHOSTS_ESCAPE >= GEN_6 + jumpiftype BS_TARGET, TYPE_GHOST, BattleScript_ButItFailed +.endif attackanimation waitanimation - setmoveeffect MOVE_EFFECT_PREVENT_ESCAPE - seteffectprimary + seteffectprimary MOVE_EFFECT_PREVENT_ESCAPE printstring STRINGID_TARGETCANTESCAPENOW waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1154,15 +4275,15 @@ BattleScript_EffectNightmare:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus2 BS_TARGET, STATUS2_NIGHTMARE, BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_NightmareWorked + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_NightmareWorked goto BattleScript_ButItFailed BattleScript_NightmareWorked:: attackanimation waitanimation - setmoveeffect MOVE_EFFECT_NIGHTMARE - seteffectprimary + seteffectprimary MOVE_EFFECT_NIGHTMARE printstring STRINGID_PKMNFELLINTONIGHTMARE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1170,7 +4291,11 @@ BattleScript_NightmareWorked:: BattleScript_EffectMinimize:: attackcanceler setminimize +.if B_MINIMIZE_EVASION >= GEN_5 + setstatchanger STAT_EVASION, 2, FALSE +.else setstatchanger STAT_EVASION, 1, FALSE +.endif goto BattleScript_EffectStatUpAfterAtkCanceler BattleScript_EffectCurse:: @@ -1209,7 +4334,6 @@ BattleScript_DoGhostCurse:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON cursetarget BattleScript_ButItFailed orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE @@ -1223,9 +4347,15 @@ BattleScript_DoGhostCurse:: tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd +BattleScript_EffectMatBlock:: + attackcanceler + jumpifnotfirstturn BattleScript_FailedFromAtkString + goto BattleScript_ProtectLikeAtkString + BattleScript_EffectProtect:: BattleScript_EffectEndure:: attackcanceler +BattleScript_ProtectLikeAtkString: attackstring ppreduce setprotectlike @@ -1248,10 +4378,12 @@ BattleScript_EffectSpikes:: BattleScript_EffectForesight:: attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifstatus2 BS_TARGET, STATUS2_FORESIGHT, BattleScript_ButItFailed setforesight +BattleScript_IdentifiedFoe: attackanimation waitanimation printstring STRINGID_PKMNIDENTIFIED @@ -1267,29 +4399,49 @@ BattleScript_EffectPerishSong:: waitanimation printstring STRINGID_FAINTINTHREE waitmessage B_WAIT_TIME_LONG - setbyte sBATTLER, 0 + setbyte gBattlerTarget, 0 BattleScript_PerishSongLoop:: - jumpifability BS_SCRIPTING, ABILITY_SOUNDPROOF, BattleScript_PerishSongNotAffected + jumpifability BS_TARGET, ABILITY_SOUNDPROOF, BattleScript_PerishSongBlocked + jumpifpranksterblocked BS_TARGET, BattleScript_PerishSongNotAffected BattleScript_PerishSongLoopIncrement:: - addbyte sBATTLER, 1 - jumpifbytenotequal sBATTLER, gBattlersCount, BattleScript_PerishSongLoop + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_PerishSongLoop goto BattleScript_MoveEnd -BattleScript_PerishSongNotAffected:: +BattleScript_PerishSongBlocked:: + copybyte sBATTLER, gBattlerTarget printstring STRINGID_PKMNSXBLOCKSY2 waitmessage B_WAIT_TIME_LONG goto BattleScript_PerishSongLoopIncrement +BattleScript_PerishSongNotAffected: + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_PerishSongLoopIncrement + BattleScript_EffectSandstorm:: attackcanceler attackstring ppreduce + call BattleScript_CheckPrimalWeather setsandstorm goto BattleScript_MoveWeatherChange +BattleScript_EffectRollout:: + attackcanceler + attackstring + jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy + ppreduce +BattleScript_RolloutCheckAccuracy:: + accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE +BattleScript_RolloutHit:: + typecalc + handlerollout + goto BattleScript_HitFromCritCalc + BattleScript_EffectSwagger:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed + jumpifsubstituteblocks BattleScript_MakeMoveMissed accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1303,11 +4455,10 @@ BattleScript_EffectSwagger:: playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_SwaggerTryConfuse:: +BattleScript_SwaggerTryConfuse: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected - setmoveeffect MOVE_EFFECT_CONFUSION - seteffectprimary + jumpifsafeguard BattleScript_SafeguardProtected + seteffectprimary MOVE_EFFECT_CONFUSION goto BattleScript_MoveEnd BattleScript_EffectFuryCutter:: @@ -1315,25 +4466,50 @@ BattleScript_EffectFuryCutter:: attackstring ppreduce accuracycheck BattleScript_FuryCutterHit, ACC_CURR_MOVE -BattleScript_FuryCutterHit:: +BattleScript_FuryCutterHit: handlefurycutter critcalc damagecalc - typecalc jumpifmovehadnoeffect BattleScript_FuryCutterHit adjustdamage goto BattleScript_HitFromAtkAnimation +BattleScript_TryDestinyKnotTarget: + jumpifnoholdeffect BS_ATTACKER, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotTargetRet + infatuatewithbattler BS_TARGET, BS_ATTACKER + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + status2animation BS_TARGET, STATUS2_INFATUATION + waitanimation + printstring STRINGID_DESTINYKNOTACTIVATES + waitmessage B_WAIT_TIME_LONG +BattleScript_TryDestinyKnotTargetRet: + return + +BattleScript_TryDestinyKnotAttacker: + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_DESTINY_KNOT, BattleScript_TryDestinyKnotAttackerRet + infatuatewithbattler BS_ATTACKER, BS_TARGET + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + status2animation BS_ATTACKER, STATUS2_INFATUATION + waitanimation + printstring STRINGID_DESTINYKNOTACTIVATES + waitmessage B_WAIT_TIME_LONG +BattleScript_TryDestinyKnotAttackerRet: + return + BattleScript_EffectAttract:: attackcanceler attackstring ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects tryinfatuating BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNFELLINLOVE waitmessage B_WAIT_TIME_LONG + call BattleScript_TryDestinyKnotAttacker goto BattleScript_MoveEnd BattleScript_EffectPresent:: @@ -1351,20 +4527,18 @@ BattleScript_EffectSafeguard:: setsafeguard goto BattleScript_PrintReflectLightScreenSafeguardString -BattleScript_EffectThawHit:: - setmoveeffect MOVE_EFFECT_BURN - goto BattleScript_EffectHit - BattleScript_EffectMagnitude:: + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_EffectMagnitudeTarget attackcanceler attackstring ppreduce - selectfirstvalidtarget magnitudedamagecalculation pause B_WAIT_TIME_SHORT printstring STRINGID_MAGNITUDESTRENGTH waitmessage B_WAIT_TIME_LONG - goto BattleScript_HitsAllWithUndergroundBonusLoop +BattleScript_EffectMagnitudeTarget: + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + goto BattleScript_HitFromCritCalc BattleScript_EffectBatonPass:: attackcanceler @@ -1381,30 +4555,29 @@ BattleScript_EffectBatonPass:: getswitchedmondata BS_ATTACKER switchindataupdate BS_ATTACKER hpthresholds BS_ATTACKER + trytoclearprimalweather + flushtextbox printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate switchineffects BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectRapidSpin:: - setmoveeffect MOVE_EFFECT_RAPIDSPIN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit - -BattleScript_EffectSonicboom:: +BattleScript_EffectFixedDamageArg:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE - setword gBattleMoveDamage, 20 + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + setargtobattledamage adjustdamage goto BattleScript_HitFromAtkAnimation BattleScript_EffectMorningSun:: BattleScript_EffectSynthesis:: BattleScript_EffectMoonlight:: +BattleScript_EffectShoreUp:: attackcanceler attackstring ppreduce @@ -1423,24 +4596,87 @@ BattleScript_MoveWeatherChange:: call BattleScript_MoveWeatherChangeRet goto BattleScript_MoveEnd +BattleScript_MoveWeatherChangeRet:: + printfromtable gMoveWeatherChangeStringIds + waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities + return + BattleScript_EffectSunnyDay:: attackcanceler attackstring ppreduce + call BattleScript_CheckPrimalWeather setsunny goto BattleScript_MoveWeatherChange -BattleScript_EffectDefenseUpHit:: - setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit +BattleScript_ExtremelyHarshSunlightWasNotLessened: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd -BattleScript_EffectAttackUpHit:: - setmoveeffect MOVE_EFFECT_ATK_PLUS_1 | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit +BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + end3 -BattleScript_EffectAllStatsUpHit:: - setmoveeffect MOVE_EFFECT_ALL_STATS_UP | MOVE_EFFECT_AFFECTS_USER - goto BattleScript_EffectHit +BattleScript_ExtremelyHarshSunlightWasNotLessenedRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_NoReliefFromHeavyRain: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_NoReliefFromHeavyRainEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_NoReliefFromHeavyRainRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_NORELIEFROMHEAVYRAIN + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MysteriousAirCurrentBlowsOn: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_MysteriousAirCurrentBlowsOnEnd3: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_MysteriousAirCurrentBlowsOnRet: + pause B_WAIT_TIME_SHORT + printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BlockedByPrimalWeatherEnd3:: + call BattleScript_AbilityPopUp + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3 + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainEnd3 + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnEnd3 + end3 + +BattleScript_BlockedByPrimalWeatherRet:: + call BattleScript_AbilityPopUp + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedRet + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainRet + jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet + return BattleScript_EffectBellyDrum:: attackcanceler @@ -1482,61 +4718,6 @@ BattleScript_EffectMirrorCoat:: adjustdamage goto BattleScript_HitFromAtkAnimation -BattleScript_EffectTwister:: - jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_FlinchEffect - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - setbyte sDMG_MULTIPLIER, 2 -BattleScript_FlinchEffect:: - setmoveeffect MOVE_EFFECT_FLINCH - goto BattleScript_EffectHit - -BattleScript_EffectEarthquake:: - attackcanceler - attackstring - ppreduce - selectfirstvalidtarget -BattleScript_HitsAllWithUndergroundBonusLoop:: - movevaluescleanup - jumpifnostatus3 BS_TARGET, STATUS3_UNDERGROUND, BattleScript_HitsAllNoUndergroundBonus - orword gHitMarker, HITMARKER_IGNORE_UNDERGROUND - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_DoHitAllWithUndergroundBonus -BattleScript_HitsAllNoUndergroundBonus:: - bicword gHitMarker, HITMARKER_IGNORE_UNDERGROUND - setbyte sDMG_MULTIPLIER, 1 -BattleScript_DoHitAllWithUndergroundBonus:: - accuracycheck BattleScript_HitAllWithUndergroundBonusMissed, ACC_CURR_MOVE - critcalc - damagecalc - typecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - tryfaintmon BS_TARGET - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop - end -BattleScript_HitAllWithUndergroundBonusMissed:: - pause B_WAIT_TIME_SHORT - typecalc - effectivenesssound - resultmessage - waitmessage B_WAIT_TIME_LONG - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_HitsAllWithUndergroundBonusLoop - end - BattleScript_EffectFutureSight:: attackcanceler attackstring @@ -1548,41 +4729,25 @@ BattleScript_EffectFutureSight:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectGust:: - jumpifnostatus3 BS_TARGET, STATUS3_ON_AIR, BattleScript_EffectHit - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_EffectHit - -BattleScript_EffectStomp:: - jumpifnostatus3 BS_TARGET, STATUS3_MINIMIZED, BattleScript_FlinchEffect - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_FlinchEffect - -BattleScript_EffectThunder:: - setmoveeffect MOVE_EFFECT_PARALYSIS - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - goto BattleScript_EffectHit - BattleScript_EffectTeleport:: +.if B_TELEPORT_BEHAVIOR >= GEN_8 + jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_EffectBatonPass + jumpifside BS_ATTACKER, B_SIDE_PLAYER, BattleScript_EffectBatonPass +.else + jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FailedFromAtkCanceler +.endif +BattleScript_EffectTeleportTryToRunAway: attackcanceler attackstring ppreduce - jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_ButItFailed getifcantrunfrombattle BS_ATTACKER - jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_ButItFailed - jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_PrintAbilityMadeIneffective + jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FORBIDDEN, BattleScript_ButItFailed + jumpifbyte CMP_EQUAL, gBattleCommunication, BATTLE_RUN_FAILURE, BattleScript_PrintAbilityMadeIneffective attackanimation waitanimation printstring STRINGID_PKMNFLEDFROMBATTLE waitmessage B_WAIT_TIME_LONG - setbyte gBattleOutcome, B_OUTCOME_PLAYER_TELEPORTED - goto BattleScript_MoveEnd - -BattleScript_PrintAbilityMadeIneffective:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNSXMADEITINEFFECTIVE - waitmessage B_WAIT_TIME_LONG + setoutcomeonteleport BS_ATTACKER goto BattleScript_MoveEnd BattleScript_EffectBeatUp:: @@ -1662,10 +4827,9 @@ BattleScript_AlreadyAtFullHp:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectFakeOut:: +BattleScript_EffectFirstTurnOnly:: attackcanceler jumpifnotfirstturn BattleScript_FailedFromAtkString - setmoveeffect MOVE_EFFECT_FLINCH | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit BattleScript_FailedFromAtkCanceler:: @@ -1676,14 +4840,22 @@ BattleScript_FailedFromPpReduce:: ppreduce BattleScript_ButItFailed:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + resultmessage + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_NotAffectedAbilityPopUp:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -1730,6 +4902,23 @@ BattleScript_EffectStockpileEnd: stockpile 1 goto BattleScript_MoveEnd +BattleScript_MoveEffectStockpileWoreOff:: + .if B_STOCKPILE_RAISES_DEFS >= GEN_4 + dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown + printstring STRINGID_STOCKPILEDEFFECTWOREOFF + waitmessage B_WAIT_TIME_SHORT + .endif + return + +BattleScript_StockpileStatChangeDown: + statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StockpileStatChangeDown_Ret: + return + BattleScript_EffectSpitUp:: attackcanceler jumpifbyte CMP_EQUAL, cMISS_TYPE, B_MSG_PROTECTED, BattleScript_SpitUpFailProtect @@ -1775,6 +4964,7 @@ BattleScript_EffectHail:: attackcanceler attackstring ppreduce + call BattleScript_CheckPrimalWeather sethail goto BattleScript_MoveWeatherChange @@ -1783,6 +4973,7 @@ BattleScript_EffectTorment:: attackstring ppreduce accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects settorment BattleScript_ButItFailed attackanimation waitanimation @@ -1792,7 +4983,7 @@ BattleScript_EffectTorment:: BattleScript_EffectFlatter:: attackcanceler - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_MakeMoveMissed + jumpifsubstituteblocks BattleScript_MakeMoveMissed accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce @@ -1808,35 +4999,42 @@ BattleScript_EffectFlatter:: waitmessage B_WAIT_TIME_LONG BattleScript_FlatterTryConfuse:: jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_OwnTempoPrevents - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected - setmoveeffect MOVE_EFFECT_CONFUSION - seteffectprimary + jumpifsafeguard BattleScript_SafeguardProtected + seteffectprimary MOVE_EFFECT_CONFUSION goto BattleScript_MoveEnd BattleScript_EffectWillOWisp:: attackcanceler attackstring ppreduce - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_ButItFailed + jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_BURN, BattleScript_AlreadyBurned jumpiftype BS_TARGET, TYPE_FIRE, BattleScript_NotAffected jumpifability BS_TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents + jumpifability BS_TARGET, ABILITY_WATER_BUBBLE, BattleScript_WaterVeilPrevents + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed + jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_SafeguardProtected + jumpifsafeguard BattleScript_SafeguardProtected attackanimation waitanimation - setmoveeffect MOVE_EFFECT_BURN - seteffectprimary + seteffectprimary MOVE_EFFECT_BURN goto BattleScript_MoveEnd BattleScript_WaterVeilPrevents:: + call BattleScript_AbilityPopUp copybyte gEffectBattler, gBattlerTarget setbyte cMULTISTRING_CHOOSER, B_MSG_ABILITY_PREVENTS_MOVE_STATUS call BattleScript_BRNPrevention goto BattleScript_MoveEnd BattleScript_AlreadyBurned:: + setalreadystatusedmoveattempt BS_ATTACKER pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNALREADYHASBURN waitmessage B_WAIT_TIME_LONG @@ -1851,7 +5049,7 @@ BattleScript_EffectMemento:: setatkhptozero attackanimation waitanimation - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectMementoPrintNoEffect + jumpifsubstituteblocks BattleScript_EffectMementoPrintNoEffect setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO @@ -1890,14 +5088,6 @@ BattleScript_MementoTargetProtectEnd: tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd -BattleScript_EffectFacade:: - jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleScript_FacadeDoubleDmg - goto BattleScript_EffectHit - -BattleScript_FacadeDoubleDmg:: - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_EffectHit - BattleScript_EffectFocusPunch:: attackcanceler jumpifnodamage BattleScript_HitFromAccCheck @@ -1906,19 +5096,13 @@ BattleScript_EffectFocusPunch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSmellingsalt:: - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_EffectHit - setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN - jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg - goto BattleScript_EffectHit -BattleScript_SmellingsaltDoubleDmg:: - setbyte sDMG_MULTIPLIER, 2 - goto BattleScript_EffectHit - BattleScript_EffectFollowMe:: attackcanceler attackstring ppreduce + .if B_UPDATED_MOVE_DATA >= GEN_6 + jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_ButItFailed + .endif setforcedtarget attackanimation waitanimation @@ -1960,6 +5144,7 @@ BattleScript_EffectTaunt:: attackcanceler attackstring ppreduce + jumpifability BS_TARGET_SIDE, ABILITY_AROMA_VEIL, BattleScript_AromaVeilProtects accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE settaunt BattleScript_ButItFailed attackanimation @@ -2040,17 +5225,13 @@ BattleScript_EffectIngrain:: attackcanceler attackstring ppreduce - settoxicspikes BattleScript_ButItFailed + setuserstatus3 STATUS3_ROOTED, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNPLANTEDROOTS waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectSuperpower:: - setmoveeffect MOVE_EFFECT_ATK_DEF_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit - BattleScript_EffectMagicCoat:: attackcanceler trysetmagiccoat BattleScript_FailedFromAtkString @@ -2073,10 +5254,6 @@ BattleScript_EffectRecycle:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRevenge:: - setgastroacid BattleScript_CoreEnforcerRet - goto BattleScript_EffectHit - BattleScript_EffectBrickBreak:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE @@ -2109,9 +5286,36 @@ BattleScript_BrickBreakDoHit:: tryfaintmon BS_TARGET goto BattleScript_MoveEnd -BattleScript_EffectKnockOff:: - setmoveeffect MOVE_EFFECT_KNOCK_OFF - goto BattleScript_EffectHit +BattleScript_EffectYawn:: + attackcanceler + attackstring + ppreduce + jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBattlerAbilityMadeIneffective + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect + jumpifflowerveil BattleScript_FlowerVeilProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifsubstituteblocks BattleScript_ButItFailed + jumpifsafeguard BattleScript_SafeguardProtected + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON + jumpifuproarwakes BattleScript_ButItFailed + setyawn BattleScript_ButItFailed + attackanimation + waitanimation +BattleScript_EffectYawnSuccess:: + printstring STRINGID_PKMNWASMADEDROWSY + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd +BattleScript_PrintBattlerAbilityMadeIneffective:: + copybyte sBATTLER, gBattlerAbility +BattleScript_PrintAbilityMadeIneffective:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSXMADEITINEFFECTIVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectEndeavor:: attackcanceler @@ -2122,7 +5326,7 @@ BattleScript_EffectEndeavor:: accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE typecalc jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE copyword gBattleMoveDamage, gHpDealt adjustdamage goto BattleScript_HitFromAtkAnimation @@ -2135,8 +5339,18 @@ BattleScript_EffectSkillSwap:: tryswapabilities BattleScript_ButItFailed attackanimation waitanimation +.if B_ABILITY_POP_UP == TRUE + call BattleScript_AbilityPopUpTarget + pause 20 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp +.endif printstring STRINGID_PKMNSWAPPEDABILITIES waitmessage B_WAIT_TIME_LONG +.if B_SKILL_SWAP >= GEN_4 + switchinabilities BS_ATTACKER + switchinabilities BS_TARGET +.endif goto BattleScript_MoveEnd BattleScript_EffectImprison:: @@ -2166,7 +5380,7 @@ BattleScript_EffectGrudge:: attackcanceler attackstring ppreduce - setstealthrock BattleScript_ButItFailed + setuserstatus3 STATUS3_GRUDGE, BattleScript_ButItFailed attackanimation waitanimation printstring STRINGID_PKMNWANTSGRUDGE @@ -2185,64 +5399,11 @@ BattleScript_EffectSnatch:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectDoubleEdge:: - setmoveeffect MOVE_EFFECT_RECOIL_33 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN +BattleScript_EffectRecoilHP25:: + jumpifnotmove MOVE_STRUGGLE, BattleScript_EffectHit + incrementgamestat GAME_STAT_USED_STRUGGLE goto BattleScript_EffectHit -BattleScript_EffectTeeterDance:: - attackcanceler - attackstring - ppreduce - setbyte gBattlerTarget, 0 -BattleScript_TeeterDanceLoop:: - movevaluescleanup - setmoveeffect MOVE_EFFECT_CONFUSION - jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_TeeterDanceLoopIncrement - jumpifability BS_TARGET, ABILITY_OWN_TEMPO, BattleScript_TeeterDanceOwnTempoPrevents - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_TeeterDanceSubstitutePrevents - jumpifstatus2 BS_TARGET, STATUS2_CONFUSION, BattleScript_TeeterDanceAlreadyConfused - accuracycheck BattleScript_TeeterDanceMissed, ACC_CURR_MOVE - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, BattleScript_TeeterDanceSafeguardProtected - attackanimation - waitanimation - seteffectprimary - resultmessage - waitmessage B_WAIT_TIME_LONG -BattleScript_TeeterDanceLoopIncrement:: - moveendto MOVEEND_NEXT_TARGET - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TeeterDanceLoop - end - -BattleScript_TeeterDanceOwnTempoPrevents:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNPREVENTSCONFUSIONWITH - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TeeterDanceLoopIncrement - -BattleScript_TeeterDanceSafeguardProtected:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNUSEDSAFEGUARD - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TeeterDanceLoopIncrement - -BattleScript_TeeterDanceSubstitutePrevents:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_BUTITFAILED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TeeterDanceLoopIncrement - -BattleScript_TeeterDanceAlreadyConfused:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNALREADYCONFUSED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TeeterDanceLoopIncrement - -BattleScript_TeeterDanceMissed:: - resultmessage - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TeeterDanceLoopIncrement - BattleScript_EffectMudSport:: BattleScript_EffectWaterSport:: attackcanceler @@ -2255,14 +5416,6 @@ BattleScript_EffectWaterSport:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectPoisonFang:: - setmoveeffect MOVE_EFFECT_TOXIC - goto BattleScript_EffectHit - -BattleScript_EffectOverheat:: - setmoveeffect MOVE_EFFECT_SP_ATK_TWO_DOWN | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN - goto BattleScript_EffectHit - BattleScript_EffectTickle:: attackcanceler attackstring @@ -2293,7 +5446,7 @@ BattleScript_TickleEnd:: BattleScript_CantLowerMultipleStats:: pause B_WAIT_TIME_SHORT - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + orhalfword gMoveResultFlags, MOVE_RESULT_FAILED printstring STRINGID_STATSWONTDECREASE2 waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -2323,10 +5476,6 @@ BattleScript_CosmicPowerTrySpDef:: BattleScript_CosmicPowerEnd:: goto BattleScript_MoveEnd -BattleScript_EffectSkyUppercut:: - orword gHitMarker, HITMARKER_IGNORE_ON_AIR - goto BattleScript_EffectHit - BattleScript_EffectBulkUp:: attackcanceler attackstring @@ -2356,11 +5505,13 @@ BattleScript_EffectCalmMind:: attackcanceler attackstring ppreduce +BattleScript_CalmMindTryToRaiseStats:: jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_CalmMindDoMoveAnim jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_CantRaiseMultipleStats BattleScript_CalmMindDoMoveAnim:: attackanimation waitanimation +BattleScript_CalmMindStatRaise:: setbyte sSTAT_ANIM_PLAYED, FALSE playstatchangeanimation BS_ATTACKER, BIT_SPATK | BIT_SPDEF, 0 setstatchanger STAT_SPATK, 1, FALSE @@ -2422,21 +5573,32 @@ BattleScript_EffectCamouflage:: goto BattleScript_MoveEnd BattleScript_FaintAttacker:: + tryillusionoff BS_ATTACKER playfaintcry BS_ATTACKER pause B_WAIT_TIME_LONG dofaintanimation BS_ATTACKER - cleareffectsonfaint BS_ATTACKER printstring STRINGID_ATTACKERFAINTED - printstring STRINGID_EMPTYSTRING3 + cleareffectsonfaint BS_ATTACKER + tryactivatesoulheart + tryactivatereceiver BS_ATTACKER + trytrainerslidefirstdownmsg BS_ATTACKER return BattleScript_FaintTarget:: + tryillusionoff BS_TARGET playfaintcry BS_TARGET pause B_WAIT_TIME_LONG dofaintanimation BS_TARGET - cleareffectsonfaint BS_TARGET printstring STRINGID_TARGETFAINTED - printstring STRINGID_EMPTYSTRING3 + cleareffectsonfaint BS_TARGET + tryactivatefellstinger BS_ATTACKER + tryactivatesoulheart + tryactivatereceiver BS_TARGET + tryactivatemoxie BS_ATTACKER @ and chilling neigh, as one ice rider + tryactivatebeastboost BS_ATTACKER + tryactivategrimneigh BS_ATTACKER @ and as one shadow rider + tryactivatebattlebond BS_ATTACKER + trytrainerslidefirstdownmsg BS_TARGET return BattleScript_GiveExp:: @@ -2533,11 +5695,13 @@ BattleScript_LinkHandleFaintedMonMultipleStart:: openpartyscreen BS_FAINTED_LINK_MULTIPLE_2, BattleScript_LinkHandleFaintedMonMultipleEnd switchhandleorder BS_FAINTED, 0 BattleScript_LinkHandleFaintedMonLoop:: - switchhandleorder BS_FAINTED, 2 + switchhandleorder BS_FAINTED, 3 drawpartystatussummary BS_FAINTED getswitchedmondata BS_FAINTED switchindataupdate BS_FAINTED hpthresholds BS_FAINTED + trytoclearprimalweather + flushtextbox printstring STRINGID_SWITCHINMON hidepartystatussummary BS_FAINTED switchinanim BS_FAINTED, FALSE @@ -2547,98 +5711,6 @@ BattleScript_LinkHandleFaintedMonLoop:: BattleScript_LinkHandleFaintedMonMultipleEnd:: end2 -BattleScript_LocalTrainerBattleWon:: - printstring STRINGID_PLAYERDEFEATEDTRAINER1 - trainerslidein BS_ATTACKER - waitstate - printstring STRINGID_TRAINER1LOSETEXT - getmoneyreward -BattleScript_LocalTrainerBattleWonGotMoney:: - printstring STRINGID_PLAYERGOTMONEY - waitmessage B_WAIT_TIME_LONG -BattleScript_PayDayMoneyAndPickUpItems:: - givepaydaymoney - pickup - end2 - -BattleScript_LocalBattleLost:: - jumpifbattletype BATTLE_TYPE_TRAINER_TOWER, BattleScript_BattleTowerLost - jumpifbattletype BATTLE_TYPE_EREADER_TRAINER, BattleScript_EReaderOrSecretBaseTrainerEnd - jumpifhalfword CMP_EQUAL, gTrainerBattleOpponent_A, TRAINER_SECRET_BASE, BattleScript_EReaderOrSecretBaseTrainerEnd - jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_RivalBattleLost -BattleScript_LocalBattleLostPrintWhiteOut:: - jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_LocalBattleLostEnd - printstring STRINGID_PLAYERWHITEOUT - waitmessage B_WAIT_TIME_LONG - getmoneyreward - printstring STRINGID_PLAYERWHITEOUT2 - waitmessage B_WAIT_TIME_LONG - goto BattleScript_EReaderOrSecretBaseTrainerEnd - -BattleScript_LocalBattleLostEnd:: - printstring STRINGID_PLAYERLOSTAGAINSTENEMYTRAINER - waitmessage B_WAIT_TIME_LONG - getmoneyreward - printstring STRINGID_PLAYERPAIDPRIZEMONEY - waitmessage B_WAIT_TIME_LONG -BattleScript_EReaderOrSecretBaseTrainerEnd:: - end2 - -BattleScript_LocalBattleLostPrintTrainersWinText:: - printstring STRINGID_PLAYERWHITEDOUT - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_RivalBattleLost:: - jumpifhasnohp BS_ATTACKER, BattleScript_RivalBattleLostSkipMonRecall - printstring STRINGID_TRAINER1MON1COMEBACK - waitmessage B_WAIT_TIME_LONG - returnatktoball - waitstate -BattleScript_RivalBattleLostSkipMonRecall:: - trainerslidein BS_ATTACKER - waitstate - printstring STRINGID_TRAINER1WINTEXT - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 2, BattleScript_LocalBattleLostPrintWhiteOut - end2 - -BattleScript_BattleTowerLost:: - getbattlersforrecall - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_BattleTowerLostLostSkipMonRecall - printfromtable gDoubleBattleRecallStrings - waitmessage B_WAIT_TIME_LONG - returnopponentmon1toball BS_ATTACKER - waitstate - returnopponentmon2toball BS_ATTACKER - waitstate -BattleScript_BattleTowerLostLostSkipMonRecall:: - trainerslidein BS_ATTACKER - waitstate - printstring STRINGID_TRAINER1WINTEXT - jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_BattleTowerLostLostSkipDouble - printstring STRINGID_TRAINER2WINTEXT -BattleScript_BattleTowerLostLostSkipDouble:: - end2 - -BattleScript_LinkBattleWonOrLost:: - printstring STRINGID_BATTLEEND - waitmessage B_WAIT_TIME_LONG - endlinkbattle - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_BattleTowerTrainerBattleWon:: - printstring STRINGID_PLAYERDEFEATEDTRAINER1 - trainerslidein BS_ATTACKER - waitstate - jumpifnotbattletype BATTLE_TYPE_TRAINER_TOWER, BattleScript_BattleTowerEtcTrainerBattleWonSkipText - printstring STRINGID_TRAINER1LOSETEXT - jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_BattleTowerEtcTrainerBattleWonSkipText - printstring STRINGID_TRAINER2LOSETEXT -BattleScript_BattleTowerEtcTrainerBattleWonSkipText:: - pickup - end2 - BattleScript_SmokeBallEscape:: playanimation BS_ATTACKER, B_ANIM_SMOKEBALL_ESCAPE printstring STRINGID_PKMNFLEDUSINGITS @@ -2660,15 +5732,6 @@ BattleScript_WildMonFled:: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_PrintCantRunFromTrainer:: - jumpifbattletype BATTLE_TYPE_FIRST_BATTLE, BattleScript_LeftoverBirchString - printstring STRINGID_NORUNNINGFROMTRAINERS - end2 - -BattleScript_LeftoverBirchString:: - printstring STRINGID_DONTLEAVEBIRCH - end2 - BattleScript_PrintFailedToRunString:: printfromtable gNoEscapeStringIds waitmessage B_WAIT_TIME_LONG @@ -2700,7 +5763,7 @@ BattleScript_PursuitSwitchDmgLoop:: BattleScript_DoSwitchOut:: decrementmultihit BattleScript_PursuitSwitchDmgLoop switchoutabilities BS_ATTACKER - @ updatedynamax @ TODO: Dynamax + updatedynamax waitstate copybyte gBattlerAttacker, sSAVED_BATTLER returnatktoball @@ -2794,6 +5857,7 @@ BattleScript_RainContinuesOrEnds:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_RAIN_STOPPED, BattleScript_RainContinuesOrEndsEnd playanimation BS_ATTACKER, B_ANIM_RAIN_CONTINUES BattleScript_RainContinuesOrEndsEnd:: + call BattleScript_ActivateWeatherAbilities end2 BattleScript_DamagingWeatherContinues:: @@ -2830,21 +5894,50 @@ BattleScript_DamagingWeatherContinuesEnd:: call BattleScript_ActivateWeatherAbilities end2 +BattleScript_SandStormHailSnowEnds:: + printfromtable gSandStormHailSnowEndStringIds + waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities + end2 + BattleScript_SunlightContinues:: printstring STRINGID_SUNLIGHTSTRONG waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_SUN_CONTINUES + call BattleScript_ActivateWeatherAbilities end2 BattleScript_SunlightFaded:: printstring STRINGID_SUNLIGHTFADED waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities end2 +BattleScript_OverworldStatusStarts:: + printfromtable gStartingStatusStringIds + waitmessage B_WAIT_TIME_LONG + playanimation_var BS_ATTACKER, sB_ANIM_ARG1 + call BattleScript_OverworldStatusStarts_TryActivations + end3 + +BattleScript_OverworldStatusStarts_TryActivations: + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TRICK_ROOM, BattleScript_TryRoomServiceLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TAILWIND_PLAYER, BattleScript_TryTailwindAbilitiesLoop + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TAILWIND_OPPONENT, BattleScript_TryTailwindAbilitiesLoop + return + BattleScript_OverworldWeatherStarts:: printfromtable gWeatherStartsStringIds waitmessage B_WAIT_TIME_LONG - playanimation_var BS_ATTACKER, sB_ANIM_ARG1 + playanimation_var BS_BATTLER_0, sB_ANIM_ARG1 + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_OverworldTerrain:: + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_BATTLER_0, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects end3 BattleScript_SideStatusWoreOff:: @@ -2852,6 +5945,61 @@ BattleScript_SideStatusWoreOff:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_SideStatusWoreOffReturn:: + printstring STRINGID_PKMNSXWOREOFF + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_LuckyChantEnds:: + printstring STRINGID_LUCKYCHANTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TailwindEnds:: + printstring STRINGID_TAILWINDENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TrickRoomEnds:: + printstring STRINGID_TRICKROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_WonderRoomEnds:: + printstring STRINGID_WONDERROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_MagicRoomEnds:: + printstring STRINGID_MAGICROOMENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TerrainEnds_Ret:: + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + return + +BattleScript_TerrainEnds:: + call BattleScript_TerrainEnds_Ret + end2 + +BattleScript_MudSportEnds:: + printstring STRINGID_MUDSPORTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_WaterSportEnds:: + printstring STRINGID_WATERSPORTENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_GravityEnds:: + printstring STRINGID_GRAVITYENDS + waitmessage B_WAIT_TIME_LONG + end2 + BattleScript_SafeguardProtected:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNUSEDSAFEGUARD @@ -2870,13 +6018,15 @@ BattleScript_LeechSeedTurnDrain:: healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER copyword gBattleMoveDamage, gHpDealt - jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedLiquidOoze - manipulatedamage 0 - setbyte cMULTISTRING_CHOOSER, 3 + jumpifability BS_ATTACKER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze + setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_DRAIN + jumpifstatus3 BS_TARGET, STATUS3_HEAL_BLOCK, BattleScript_LeechSeedHealBlock + manipulatedamage DMG_BIG_ROOT goto BattleScript_LeechSeedTurnPrintAndUpdateHp - -BattleScript_LeechSeedLiquidOoze:: - setbyte cMULTISTRING_CHOOSER, 4 +BattleScript_LeechSeedTurnPrintLiquidOoze:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setbyte cMULTISTRING_CHOOSER, B_MSG_LEECH_SEED_OOZE BattleScript_LeechSeedTurnPrintAndUpdateHp:: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_TARGET @@ -2886,6 +6036,9 @@ BattleScript_LeechSeedTurnPrintAndUpdateHp:: tryfaintmon BS_ATTACKER tryfaintmon BS_TARGET end2 +BattleScript_LeechSeedHealBlock: + setword gBattleMoveDamage, 0 + goto BattleScript_LeechSeedTurnPrintAndUpdateHp BattleScript_BideStoringEnergy:: printstring STRINGID_PKMNSTORINGENERGY @@ -2894,13 +6047,12 @@ BattleScript_BideStoringEnergy:: BattleScript_BideAttack:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE typecalc - bicbyte gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE + bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE copyword gBattleMoveDamage, sBIDE_DMG adjustdamage setbyte sB_ANIM_TURN, 1 @@ -2918,30 +6070,101 @@ BattleScript_BideAttack:: BattleScript_BideNoEnergyToAttack:: attackcanceler - setmoveeffect MOVE_EFFECT_CHARGING - clearstatusfromeffect BS_ATTACKER + clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING printstring STRINGID_PKMNUNLEASHEDENERGY waitmessage B_WAIT_TIME_LONG goto BattleScript_ButItFailed -BattleScript_SuccessForceOut:: - attackanimation - waitanimation - switchoutabilities BS_TARGET - returntoball BS_TARGET, FALSE - waitstate - jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_TrainerBattleForceOut - setbyte gBattleOutcome, B_OUTCOME_PLAYER_TELEPORTED - finishaction - -BattleScript_TrainerBattleForceOut:: +BattleScript_RoarSuccessSwitch:: + call BattleScript_RoarSuccessRet getswitchedmondata BS_TARGET switchindataupdate BS_TARGET + trytoclearprimalweather + flushtextbox switchinanim BS_TARGET, FALSE waitstate printstring STRINGID_PKMNWASDRAGGEDOUT switchineffects BS_TARGET + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessSwitch_Ret + setbyte sSWITCH_CASE, B_SWITCH_NORMAL goto BattleScript_MoveEnd +BattleScript_RoarSuccessSwitch_Ret: + swapattackerwithtarget @ continuation of RedCardActivates + restoretarget + setbyte sSWITCH_CASE, B_SWITCH_NORMAL + return + +BattleScript_RoarSuccessEndBattle:: + call BattleScript_RoarSuccessRet + setbyte sSWITCH_CASE, B_SWITCH_NORMAL + setoutcomeonteleport BS_ATTACKER + finishaction + +BattleScript_RoarSuccessRet: + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_HIT, BattleScript_RoarSuccessRet_Ret + jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessRet_Ret + attackanimation + waitanimation +BattleScript_RoarSuccessRet_Ret: + switchoutabilities BS_TARGET + returntoball BS_TARGET, FALSE + waitstate + return + +BattleScript_WeaknessPolicy:: + copybyte sBATTLER, gBattlerTarget + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyAtk + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyEnd +BattleScript_WeaknessPolicyAtk: + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_BY_TWO + setstatchanger STAT_ATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicySpAtk + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeaknessPolicySpAtk: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicyRemoveItem + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeaknessPolicyRemoveItem: + removeitem BS_TARGET +BattleScript_WeaknessPolicyEnd: + return + +BattleScript_TargetItemStatRaise:: + copybyte sBATTLER, gBattlerTarget + statbuffchange 0, BattleScript_TargetItemStatRaiseRemoveItemRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_TargetItemStatRaiseRemoveItemRet + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET +BattleScript_TargetItemStatRaiseRemoveItemRet: + return + +BattleScript_AttackerItemStatRaise:: + copybyte sBATTLER, gBattlerAttacker + statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_AttackerItemStatRaiseRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackerItemStatRaiseRet + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER +BattleScript_AttackerItemStatRaiseRet: + return BattleScript_MistProtected:: pause B_WAIT_TIME_SHORT @@ -2950,8 +6173,10 @@ BattleScript_MistProtected:: return BattleScript_RageIsBuilding:: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RageIsBuildingEnd printstring STRINGID_PKMNRAGEBUILDING waitmessage B_WAIT_TIME_LONG +BattleScript_RageIsBuildingEnd: return BattleScript_MoveUsedIsDisabled:: @@ -2968,6 +6193,12 @@ BattleScript_DisabledNoMore:: waitmessage B_WAIT_TIME_LONG end2 +BattleScript_SelectingDisabledMoveInPalace:: + printstring STRINGID_PKMNMOVEISDISABLED +BattleScript_SelectingUnusableMoveInPalace:: + moveendto MOVEEND_NEXT_TARGET + end + BattleScript_EncoredNoMore:: printstring STRINGID_PKMNENCOREENDED waitmessage B_WAIT_TIME_LONG @@ -2982,11 +6213,106 @@ BattleScript_DestinyBondTakesLife:: tryfaintmon BS_ATTACKER return -BattleScript_PrintHurtBySpikes:: - printstring STRINGID_PKMNHURTBYSPIKES +BattleScript_DmgHazardsOnAttacker:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_ATTACKER + tryfaintmon_spikes BS_ATTACKER, BattleScript_DmgHazardsOnAttackerFainted + return + +BattleScript_DmgHazardsOnAttackerFainted:: + setbyte sGIVEEXP_STATE, 0 + getexp BS_ATTACKER + moveendall + goto BattleScript_HandleFaintedMon + +BattleScript_DmgHazardsOnTarget:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_TARGET + tryfaintmon_spikes BS_TARGET, BattleScript_DmgHazardsOnTargetFainted + return + +BattleScript_DmgHazardsOnTargetFainted:: + setbyte sGIVEEXP_STATE, 0 + getexp BS_TARGET + moveendall + goto BattleScript_HandleFaintedMon + +BattleScript_DmgHazardsOnBattlerScripting:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_SCRIPTING + tryfaintmon_spikes BS_SCRIPTING, BattleScript_DmgHazardsOnBattlerScriptingFainted + return + +BattleScript_DmgHazardsOnBattlerScriptingFainted:: + setbyte sGIVEEXP_STATE, 0 + getexp BS_SCRIPTING + moveendall + goto BattleScript_HandleFaintedMon + +BattleScript_DmgHazardsOnFaintedBattler:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_FAINTED + datahpupdate BS_FAINTED + call BattleScript_PrintHurtByDmgHazards + tryfaintmon BS_FAINTED + tryfaintmon_spikes BS_FAINTED, BattleScript_DmgHazardsOnFaintedBattlerFainted + return + +BattleScript_DmgHazardsOnFaintedBattlerFainted:: + setbyte sGIVEEXP_STATE, 0 + getexp BS_FAINTED + moveendall + goto BattleScript_HandleFaintedMon + +BattleScript_PrintHurtByDmgHazards:: + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG return +BattleScript_ToxicSpikesAbsorbed:: + printstring STRINGID_TOXICSPIKESABSORBED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ToxicSpikesPoisoned:: + printstring STRINGID_TOXICSPIKESPOISONED + waitmessage B_WAIT_TIME_LONG + statusanimation BS_SCRIPTING + updatestatusicon BS_SCRIPTING + waitstate + return + +BattleScript_StickyWebOnSwitchIn:: + savetarget + copybyte gBattlerTarget, sBATTLER + setbyte sSTICKY_WEB_STAT_DROP, 1 + printstring STRINGID_STICKYWEBSWITCHIN + waitmessage B_WAIT_TIME_LONG + jumpifability BS_TARGET, ABILITY_MIRROR_ARMOR, BattleScript_MirrorArmorReflectStickyWeb + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StickyWebOnSwitchInStatAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StickyWebOnSwitchInEnd + pause B_WAIT_TIME_SHORT + goto BattleScript_StickyWebOnSwitchInPrintStatMsg +BattleScript_StickyWebOnSwitchInStatAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_StickyWebOnSwitchInPrintStatMsg: + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StickyWebOnSwitchInEnd: + restoretarget + return + BattleScript_PerishSongTakesLife:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG @@ -2996,6 +6322,144 @@ BattleScript_PerishSongTakesLife:: tryfaintmon BS_ATTACKER end2 +BattleScript_PerishBodyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSWILLPERISHIN3TURNS + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + return + +BattleScript_GulpMissileGorging:: + call BattleScript_AbilityPopUp + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO animation: B_ANIM_GULP_MISSILE + waitanimation + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + effectivenesssound + hitanimation BS_ATTACKER + waitstate + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGorging + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGorging +BattleScript_GulpMissileNoDmgGorging: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + swapattackerwithtarget + seteffectprimary MOVE_EFFECT_PARALYSIS + swapattackerwithtarget + return +BattleScript_GulpMissileNoSecondEffectGorging: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + return + +BattleScript_GulpMissileGulping:: + call BattleScript_AbilityPopUp + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO animation: B_ANIM_GULP_MISSILE + waitanimation + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + effectivenesssound + hitanimation BS_ATTACKER + waitstate + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGulping + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + tryfaintmon BS_ATTACKER + jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGulping + jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_CLEAR_AMULET, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_CLEAR_BODY, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_FULL_METAL_BODY, BattleScript_GulpMissileNoSecondEffectGulping + jumpifability BS_ATTACKER, ABILITY_WHITE_SMOKE, BattleScript_GulpMissileNoSecondEffectGulping + jumpifflowerveilattacker BattleScript_GulpMissileNoSecondEffectGulping +BattleScript_GulpMissileNoDmgGulping: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_GulpMissileGorgingTargetDefenseCantGoLower + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget @ restore the battlers, just in case + return +BattleScript_GulpMissileNoSecondEffectGulping: + handleformchange BS_TARGET, 0 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + return +BattleScript_GulpMissileGorgingTargetDefenseCantGoLower: + printstring STRINGID_STATSWONTDECREASE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SeedSowerActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESGRASSY + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + return + +BattleScript_AngerShellActivates:: + call BattleScript_AbilityPopUp + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed +BattleScript_AngerShellTryDef:: + setbyte sSTAT_ANIM_PLAYED, FALSE + modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON +BattleScript_AngerShellTrySpDef: + modifybattlerstatstage BS_ATTACKER, STAT_SPDEF, DECREASE, 1, BattleScript_AngerShellTryAttack, ANIM_ON +BattleScript_AngerShellTryAttack: + setbyte sSTAT_ANIM_PLAYED, FALSE + modifybattlerstatstage BS_ATTACKER, STAT_ATK, INCREASE, 1, BattleScript_AngerShellTrySpAtk, ANIM_ON +BattleScript_AngerShellTrySpAtk: + modifybattlerstatstage BS_ATTACKER, STAT_SPATK, INCREASE, 1, BattleScript_AngerShellTrySpeed, ANIM_ON +BattleScript_AngerShellTrySpeed: + modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON +BattleScript_AngerShellRet: + return + +BattleScript_WindPowerActivates:: + call BattleScript_AbilityPopUp + setcharge BS_TARGET + printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER + waitmessage B_WAIT_TIME_LONG +BattleScript_WindPowerActivates_Ret: + return + +BattleScript_ToxicDebrisActivates:: + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_SHORT + settoxicspikes BattleScript_ToxicDebrisRet + printstring STRINGID_POISONSPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG +BattleScript_ToxicDebrisRet: + copybyte sBATTLER, gBattlerTarget + copybyte gBattlerTarget, gBattlerAttacker + copybyte gBattlerAttacker, sBATTLER + return + +BattleScript_EarthEaterActivates:: + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG + tryhealquarterhealth BS_TARGET, BattleScript_EarthEaterRet + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_EarthEaterRet: + return + BattleScript_PerishSongCountGoesDown:: printstring STRINGID_PKMNPERISHCOUNTFELL waitmessage B_WAIT_TIME_LONG @@ -3077,6 +6541,31 @@ BattleScript_SteelsurgeFree:: waitmessage B_WAIT_TIME_LONG return +BattleScript_SpikesDefog:: + printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ToxicSpikesDefog:: + printstring STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyWebDefog:: + printstring STRINGID_STICKYWEBDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StealthRockDefog:: + printstring STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_SteelsurgeDefog:: + printstring STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + BattleScript_MonTookFutureAttack:: printstring STRINGID_PKMNTOOKATTACK waitmessage B_WAIT_TIME_LONG @@ -3089,6 +6578,7 @@ BattleScript_FutureAttackAnimate:: critcalc damagecalc adjustdamage + jumpifmovehadnoeffect BattleScript_DoFutureAttackResult jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_FUTURE_SIGHT, BattleScript_FutureHitAnimDoomDesire playanimation BS_ATTACKER, B_ANIM_FUTURE_SIGHT_HIT goto BattleScript_DoFutureAttackHit @@ -3100,23 +6590,25 @@ BattleScript_DoFutureAttackHit:: waitstate healthbarupdate BS_TARGET datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG +BattleScript_DoFutureAttackResult: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET checkteamslost BattleScript_FutureAttackEnd BattleScript_FutureAttackEnd:: moveendcase MOVEEND_RAGE + moveendcase MOVEEND_ABILITIES moveendfromto MOVEEND_ITEM_EFFECTS_ALL, MOVEEND_UPDATE_LAST_MOVES setbyte gMoveResultFlags, 0 end2 - BattleScript_FutureAttackMiss:: pause B_WAIT_TIME_SHORT - setbyte gMoveResultFlags, 0 - orbyte gMoveResultFlags, MOVE_RESULT_FAILED + sethword gMoveResultFlags, MOVE_RESULT_FAILED resultmessage waitmessage B_WAIT_TIME_LONG - setbyte gMoveResultFlags, 0 + sethword gMoveResultFlags, 0 end2 BattleScript_NoMovesLeft:: @@ -3138,10 +6630,15 @@ BattleScript_SelectingTormentedMove:: printselectionstring STRINGID_PKMNCANTUSEMOVETORMENT endselectionscript +BattleScript_MoveUsedIsTormented:: printstring STRINGID_PKMNCANTUSEMOVETORMENT waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_SelectingTormentedMoveInPalace:: + printstring STRINGID_PKMNCANTUSEMOVETORMENT + goto BattleScript_SelectingUnusableMoveInPalace + BattleScript_SelectingNotAllowedMoveTaunt:: printselectionstring STRINGID_PKMNCANTUSEMOVETAUNT endselectionscript @@ -3151,6 +6648,86 @@ BattleScript_MoveUsedIsTaunted:: waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_SelectingNotAllowedMoveTauntInPalace:: + printstring STRINGID_PKMNCANTUSEMOVETAUNT + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveThroatChop:: + printselectionstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + endselectionscript + +BattleScript_MoveUsedIsThroatChopPrevented:: + printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveThroatChopInPalace:: + printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_ThroatChopEndTurn:: + printstring STRINGID_THROATCHOPENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_SlowStartEnds:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_SLOWSTARTEND + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_SelectingNotAllowedMoveGravity:: + printselectionstring STRINGID_GRAVITYPREVENTSUSAGE + endselectionscript + +BattleScript_SelectingNotAllowedStuffCheeks:: + printselectionstring STRINGID_STUFFCHEEKSCANTSELECT + endselectionscript + +BattleScript_SelectingNotAllowedStuffCheeksInPalace:: + printstring STRINGID_STUFFCHEEKSCANTSELECT + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedBelch:: + printselectionstring STRINGID_BELCHCANTSELECT + endselectionscript + +BattleScript_SelectingNotAllowedBelchInPalace:: + printstring STRINGID_BELCHCANTSELECT + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_MoveUsedGravityPrevents:: + printstring STRINGID_GRAVITYPREVENTSUSAGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveGravityInPalace:: + printstring STRINGID_GRAVITYPREVENTSUSAGE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveHealBlock:: + printselectionstring STRINGID_HEALBLOCKPREVENTSUSAGE + endselectionscript + +BattleScript_MoveUsedHealBlockPrevents:: + printstring STRINGID_HEALBLOCKPREVENTSUSAGE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_SelectingNotAllowedMoveHealBlockInPalace:: + printstring STRINGID_HEALBLOCKPREVENTSUSAGE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedCurrentMove:: + printselectionstring STRINGID_CURRENTMOVECANTSELECT + endselectionscript + +BattleScript_SelectingNotAllowedCurrentMoveInPalace:: + printstring STRINGID_CURRENTMOVECANTSELECT + goto BattleScript_SelectingUnusableMoveInPalace + BattleScript_WishComesTrue:: trywish 1, BattleScript_WishButFullHp playanimation BS_TARGET, B_ANIM_WISH_HEAL @@ -3181,6 +6758,11 @@ BattleScript_TurnHeal: datahpupdate BS_ATTACKER end2 +BattleScript_AquaRingHeal:: + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: animation B_ANIM_AQUA_RING_HEAL + printstring STRINGID_AQUARINGHEAL + goto BattleScript_TurnHeal + BattleScript_PrintMonIsRooted:: pause B_WAIT_TIME_SHORT printstring STRINGID_PKMNANCHOREDITSELF @@ -3192,18 +6774,18 @@ BattleScript_AtkDefDown:: playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_MULTIPLE_STATS playstatchangeanimation BS_ATTACKER, BIT_ATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_ATK, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownAtkFail - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 2, BattleScript_AtkDefDownAtkFail + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownTryDef + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownTryDef printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_AtkDefDownAtkFail:: - playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT +BattleScript_AtkDefDownTryDef: + playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_AtkDefDownDefFail - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 2, BattleScript_AtkDefDownDefFail + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_AtkDefDownRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_AtkDefDownRet printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG -BattleScript_AtkDefDownDefFail:: +BattleScript_AtkDefDownRet: return BattleScript_DefSpDefDown:: @@ -3225,6 +6807,26 @@ BattleScript_DefSpDefDownTrySpDef:: BattleScript_DefSpDefDownRet:: return +BattleScript_DefDownSpeedUp:: + jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_DefDownSpeedUpTryDef + jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_DefDownSpeedUpRet +BattleScript_DefDownSpeedUpTryDef:: + playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT + setstatchanger STAT_DEF, 1, TRUE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpTrySpeed + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefDownSpeedUpTrySpeed: + playstatchangeanimation BS_ATTACKER, BIT_SPEED, 0 + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpRet + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpRet + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_DefDownSpeedUpRet:: + return + BattleScript_KnockedOff:: playanimation BS_TARGET, B_ANIM_ITEM_KNOCKOFF printstring STRINGID_PKMNKNOCKEDOFF @@ -3240,6 +6842,10 @@ BattleScript_SelectingImprisonedMove:: printselectionstring STRINGID_PKMNCANTUSEMOVESEALED endselectionscript +BattleScript_SelectingImprisonedMoveInPalace:: + printstring STRINGID_PKMNCANTUSEMOVESEALED + goto BattleScript_SelectingUnusableMoveInPalace + BattleScript_GrudgeTakesPp:: printstring STRINGID_PKMNLOSTPPGRUDGE waitmessage B_WAIT_TIME_LONG @@ -3286,30 +6892,265 @@ BattleScript_EnduredMsg:: waitmessage B_WAIT_TIME_LONG return +BattleScript_SturdiedMsg:: + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUpTarget + printstring STRINGID_ENDUREDSTURDY + waitmessage B_WAIT_TIME_LONG + return + BattleScript_OneHitKOMsg:: printstring STRINGID_ONEHITKO waitmessage B_WAIT_TIME_LONG return BattleScript_SAtkDown2:: - setbyte sSTAT_ANIM_PLAYED, 0 - playstatchangeanimation BS_ATTACKER, BIT_SPATK, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO | STAT_CHANGE_CANT_PREVENT + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_SPATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 2, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_SAtkDown2End - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 2, BattleScript_SAtkDown2End + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_SAtkDown2End + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SAtkDown2End printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_SAtkDown2End:: return +BattleScript_MoveEffectClearSmog:: + printstring STRINGID_RESETSTARGETSSTATLEVELS + waitmessage B_WAIT_TIME_LONG + return + BattleScript_FocusPunchSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 + flushtextbox playanimation BS_ATTACKER, B_ANIM_FOCUS_PUNCH_SETUP printstring STRINGID_PKMNTIGHTENINGFOCUS waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_MegaEvolution:: + flushtextbox + trytrainerslidemegaevolutionmsg + printstring STRINGID_MEGAEVOREACTING +BattleScript_MegaEvolutionAfterString: + waitmessage B_WAIT_TIME_LONG + setbyte gIsCriticalHit, 0 + handlemegaevo BS_ATTACKER, 0 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE @ TODO animation: B_ANIM_MEGA_EVOLUTION + waitanimation + handlemegaevo BS_ATTACKER, 1 + printstring STRINGID_MEGAEVOEVOLVED + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end3 + +BattleScript_WishMegaEvolution:: + flushtextbox + trytrainerslidemegaevolutionmsg + printstring STRINGID_FERVENTWISHREACHED + goto BattleScript_MegaEvolutionAfterString + +BattleScript_PrimalReversion:: + call BattleScript_PrimalReversionRet end2 +BattleScript_PrimalReversionRestoreAttacker:: + call BattleScript_PrimalReversionRet + copybyte gBattlerAttacker, sSAVED_BATTLER + end2 + +BattleScript_PrimalReversionRet:: + flushtextbox + setbyte gIsCriticalHit, 0 + handleprimalreversion BS_ATTACKER, 0 + handleprimalreversion BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: animation B_ANIM_PRIMAL_REVERSION + waitanimation + handleprimalreversion BS_ATTACKER, 2 + printstring STRINGID_PKMNREVERTEDTOPRIMAL + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + return + +BattleScript_UltraBurst:: + flushtextbox + trytrainerslidezmovemsg + printstring STRINGID_ULTRABURSTREACTING + waitmessage B_WAIT_TIME_LONG + setbyte gIsCriticalHit, 0 + handleultraburst BS_ATTACKER, 0 + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: animation B_ANIM_ULTRA_BURST + waitanimation + handleultraburst BS_ATTACKER, 1 + printstring STRINGID_ULTRABURSTCOMPLETED + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + end3 + +BattleScript_GulpMissileFormChange:: + call BattleScript_AttackerFormChange + goto BattleScript_FromTwoTurnMovesSecondTurnRet + +BattleScript_AttackerFormChange:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + flushtextbox +BattleScript_AttackerFormChangeNoPopup:: + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_ATTACKER, 2 + return + +BattleScript_AttackerFormChangeEnd3:: + call BattleScript_AttackerFormChange + end3 + +BattleScript_AttackerFormChangeEnd3NoPopup:: + call BattleScript_AttackerFormChangeNoPopup + end3 + +BattleScript_AttackerFormChangeMoveEffect:: + waitmessage 1 + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + copybyte sBATTLER, gBattlerAttacker + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + handleformchange BS_ATTACKER, 2 + return + +BattleScript_BallFetch:: + call BattleScript_AbilityPopUp + printstring STRINGID_FETCHEDPOKEBALL + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_CudChewActivates:: + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUp + setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries + consumeberry BS_SCRIPTING, FALSE + setbyte sBERRY_OVERRIDE, 0 + end3 + +BattleScript_TargetFormChangeNoPopup: + flushtextbox + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_TARGET, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_SCRIPTING, 2 +.if B_DISGUISE_HP_LOSS >= GEN_8 + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING +.endif + return + +BattleScript_TargetFormChange:: + pause 5 + call BattleScript_AbilityPopUpTarget + call BattleScript_TargetFormChangeNoPopup + return + +BattleScript_TargetFormChangeWithString:: + pause 5 + call BattleScript_AbilityPopUpTarget + call BattleScript_TargetFormChangeNoPopup + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_TargetFormChangeWithStringNoPopup:: + call BattleScript_TargetFormChangeNoPopup + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerFormChangeWithStringEnd3:: + pause 5 + call BattleScript_AbilityPopUp + flushtextbox + handleformchange BS_SCRIPTING, 0 + handleformchange BS_SCRIPTING, 1 + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE, NULL + waitanimation + handleformchange BS_SCRIPTING, 2 + printstring STRINGID_PKMNTRANSFORMED + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_IllusionOff:: + spriteignore0hp TRUE + playanimation BS_TARGET, B_ANIM_MON_HIT @ TODO: animation B_ANIM_ILLUSION_OFF + waitanimation + updatenick BS_TARGET + waitstate + spriteignore0hp FALSE + printstring STRINGID_ILLUSIONWOREOFF + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_CottonDownActivates:: + copybyte sSAVED_BATTLER, gBattlerAttacker + call BattleScript_AbilityPopUpTarget + copybyte gEffectBattler, gBattlerTarget + swapattackerwithtarget + setbyte gBattlerTarget, 0 +BattleScript_CottonDownLoop: + jumpiffainted BS_TARGET, TRUE, BattleScript_CottonDownLoopIncrement + setstatchanger STAT_SPEED, 1, TRUE + jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_CottonDownLoopIncrement +BattleScript_CottonDownTargetSpeedCantGoLower: + printstring STRINGID_STATSWONTDECREASE + waitmessage B_WAIT_TIME_LONG +BattleScript_CottonDownLoopIncrement: + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop +BattleScript_CottonDownReturn: + swapattackerwithtarget + copybyte gBattlerAttacker, sSAVED_BATTLER + return + +BattleScript_AnticipationActivates:: + pause 5 + call BattleScript_AbilityPopUp + printstring STRINGID_ANTICIPATIONACTIVATES + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AftermathDmg:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_AFTERMATHDMG + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER +BattleScript_AftermathDmgRet: + return + +BattleScript_DampPreventsAftermath:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + pause 40 + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSABILITYPREVENTSABILITY + waitmessage B_WAIT_TIME_LONG + return + BattleScript_MoveUsedIsAsleep:: printstring STRINGID_PKMNFASTASLEEP waitmessage B_WAIT_TIME_LONG @@ -3334,13 +7175,24 @@ BattleScript_PoisonTurnDmg:: waitmessage B_WAIT_TIME_LONG BattleScript_DoStatusTurnDmg:: statusanimation BS_ATTACKER -BattleScript_DoTurnDmg:: +BattleScript_DoTurnDmg: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER tryfaintmon BS_ATTACKER checkteamslost BattleScript_DoTurnDmgEnd -BattleScript_DoTurnDmgEnd:: +BattleScript_DoTurnDmgEnd: + end2 + +BattleScript_PoisonHealActivates:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_POISONHEALHPUP + waitmessage B_WAIT_TIME_LONG + statusanimation BS_ATTACKER + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER end2 BattleScript_BurnTurnDmg:: @@ -3348,6 +7200,11 @@ BattleScript_BurnTurnDmg:: waitmessage B_WAIT_TIME_LONG goto BattleScript_DoStatusTurnDmg +BattleScript_FrostbiteTurnDmg:: + printstring STRINGID_PKMNHURTBYFROSTBITE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_DoStatusTurnDmg + BattleScript_MoveUsedIsFrozen:: printstring STRINGID_PKMNISFROZEN waitmessage B_WAIT_TIME_LONG @@ -3360,12 +7217,24 @@ BattleScript_MoveUsedUnfroze:: updatestatusicon BS_ATTACKER return +BattleScript_MoveUsedUnfrostbite:: + printfromtable gFrostbiteHealedStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_ATTACKER + return + BattleScript_DefrostedViaFireMove:: printstring STRINGID_PKMNWASDEFROSTED waitmessage B_WAIT_TIME_LONG updatestatusicon BS_TARGET return +BattleScript_FrostbiteHealedViaFireMove:: + printstring STRINGID_PKMNFROSTBITEHEALED + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_TARGET + return + BattleScript_MoveUsedIsParalyzed:: printstring STRINGID_PKMNISPARALYZED waitmessage B_WAIT_TIME_LONG @@ -3373,10 +7242,43 @@ BattleScript_MoveUsedIsParalyzed:: cancelmultiturnmoves BS_ATTACKER goto BattleScript_MoveEnd +BattleScript_PowderMoveNoEffect:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint + jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat + printstring STRINGID_SAFETYGOGGLESPROTECTED + goto BattleScript_PowderMoveNoEffectWaitMsg +BattleScript_PowderMoveNoEffectOvercoat: + call BattleScript_AbilityPopUp +BattleScript_PowderMoveNoEffectPrint: + printstring STRINGID_ITDOESNTAFFECT +BattleScript_PowderMoveNoEffectWaitMsg: + waitmessage B_WAIT_TIME_LONG + cancelmultiturnmoves BS_ATTACKER + sethword gMoveResultFlags, MOVE_RESULT_FAILED + goto BattleScript_MoveEnd + BattleScript_MoveUsedFlinched:: printstring STRINGID_PKMNFLINCHED waitmessage B_WAIT_TIME_LONG + jumpifability BS_ATTACKER ABILITY_STEADFAST BattleScript_TryActivateSteadFast +BattleScript_MoveUsedFlinchedEnd: goto BattleScript_MoveEnd +BattleScript_TryActivateSteadFast: + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_MoveUsedFlinchedEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_MoveUsedFlinchedEnd + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + setbyte gBattleCommunication STAT_SPEED + stattextbuffer BS_ATTACKER + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveUsedFlinchedEnd BattleScript_PrintUproarOverTurns:: printfromtable gUproarOverTurnStringIds @@ -3412,6 +7314,25 @@ BattleScript_DoSelfConfusionDmg:: BattleScript_MoveUsedIsConfusedRet:: return +BattleScript_MoveUsedPowder:: + bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + cancelmultiturnmoves BS_ATTACKER + status2animation BS_ATTACKER, STATUS2_POWDER + waitanimation + effectivenesssound + hitanimation BS_ATTACKER + waitstate + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_POWDEREXPLODES + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + goto BattleScript_MoveEnd + BattleScript_MoveUsedIsConfusedNoMore:: printstring STRINGID_PKMNHEALEDCONFUSION waitmessage B_WAIT_TIME_LONG @@ -3463,26 +7384,17 @@ BattleScript_TargetPRLZHeal:: updatestatusicon BS_TARGET return -BattleScript_TooScaredToMove:: - printstring STRINGID_MONTOOSCAREDTOMOVE +BattleScript_TargetWokeUp:: + printstring STRINGID_TARGETWOKEUP waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_MON_SCARED - goto BattleScript_MoveEnd + updatestatusicon BS_TARGET + return -BattleScript_GhostGetOutGetOut:: - printstring STRINGID_GHOSTGETOUTGETOUT - playanimation BS_ATTACKER, B_ANIM_GHOST_GET_OUT - goto BattleScript_MoveEnd - -BattleScript_SilphScopeUnveiled:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_SILPHSCOPEUNVEILED - waitstate - playanimation BS_OPPONENT1, B_ANIM_SILPH_SCOPED - pause B_WAIT_TIME_SHORT - printstring STRINGID_GHOSTWASMAROWAK +BattleScript_TargetBurnHeal:: + printstring STRINGID_PKMNBURNHEALED waitmessage B_WAIT_TIME_LONG - end2 + updatestatusicon BS_TARGET + return BattleScript_MoveEffectSleep:: statusanimation BS_EFFECT_BATTLER @@ -3491,6 +7403,8 @@ BattleScript_MoveEffectSleep:: BattleScript_UpdateEffectStatusIconRet:: updatestatusicon BS_EFFECT_BATTLER waitstate + trytriggerstatusform + flushtextbox return BattleScript_YawnMakesAsleep:: @@ -3499,7 +7413,37 @@ BattleScript_YawnMakesAsleep:: waitmessage B_WAIT_TIME_LONG updatestatusicon BS_EFFECT_BATTLER waitstate + jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_SKY_DROPPED, BattleScript_YawnEnd makevisible BS_EFFECT_BATTLER + skydropyawn +BattleScript_YawnEnd: + end2 + +BattleScript_EmbargoEndTurn:: + printstring STRINGID_EMBARGOENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TelekinesisEndTurn:: + printstring STRINGID_TELEKINESISENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_BufferEndTurn:: + printstring STRINGID_BUFFERENDS + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_ToxicOrb:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectToxic + end2 + +BattleScript_FlameOrb:: + setbyte cMULTISTRING_CHOOSER, 0 + copybyte gEffectBattler, gBattlerAttacker + call BattleScript_MoveEffectBurn end2 BattleScript_MoveEffectPoison:: @@ -3563,11 +7507,12 @@ BattleScript_MoveEffectRecoil:: jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd BattleScript_DoRecoil:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNHITWITHRECOIL waitmessage B_WAIT_TIME_LONG + tryupdaterecoiltracker tryfaintmon BS_ATTACKER BattleScript_RecoilEnd:: return @@ -3587,24 +7532,160 @@ BattleScript_DrizzleActivates:: call BattleScript_ActivateWeatherAbilities end3 +BattleScript_AbilityRaisesDefenderStat:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + statbuffchange 0, NULL + setgraphicalstatchangevalues + playanimation BS_ABILITY_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_DEFENDERSSTATROSE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_AbilityPopUpTarget: + copybyte gBattlerAbility, gBattlerTarget +BattleScript_AbilityPopUp: + .if B_ABILITY_POP_UP == TRUE + showabilitypopup BS_ABILITY_BATTLER + pause 40 + .endif + recordability BS_ABILITY_BATTLER + sethword sABILITY_OVERWRITE, 0 + return + BattleScript_SpeedBoostActivates:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_SpeedBoostActivatesEnd + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNRAISEDSPEED waitmessage B_WAIT_TIME_LONG +BattleScript_SpeedBoostActivatesEnd: end3 +@ Can't compare directly to a value, have to compare to value at pointer +sZero: +.byte 0 + +BattleScript_MoodyActivates:: + call BattleScript_AbilityPopUp + jumpifbyteequal sSTATCHANGER, sZero, BattleScript_MoodyLower + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_MoodyLower + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MoodyLower: + jumpifbyteequal sSAVED_STAT_CHANGER, sZero, BattleScript_MoodyEnd + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_MoodyEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_MoodyEnd: + end3 + +BattleScript_EmergencyExit:: + pause 5 + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG +BattleScript_EmergencyExitNoPopUp:: + playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + waitanimation + openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet + switchoutabilities BS_TARGET + waitstate + switchhandleorder BS_TARGET, 2 + returntoball BS_TARGET, FALSE + getswitchedmondata BS_TARGET + switchindataupdate BS_TARGET + hpthresholds BS_TARGET + printstring STRINGID_SWITCHINMON + switchinanim BS_TARGET, TRUE + waitstate + switchineffects BS_TARGET +BattleScript_EmergencyExitRet: + return + +BattleScript_EmergencyExitWild:: + pause 5 + call BattleScript_AbilityPopUp + pause B_WAIT_TIME_LONG +BattleScript_EmergencyExitWildNoPopUp:: + playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN + waitanimation + setoutcomeonteleport BS_TARGET + finishaction + return + BattleScript_TraceActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNTRACED waitmessage B_WAIT_TIME_LONG + settracedability BS_SCRIPTING + switchinabilities BS_SCRIPTING + return + +BattleScript_TraceActivatesEnd3:: + call BattleScript_TraceActivates end3 -BattleScript_RainDishActivates:: +BattleScript_ReceiverActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_RECEIVERABILITYTAKEOVER + waitmessage B_WAIT_TIME_LONG + settracedability BS_ABILITY_BATTLER + return + +BattleScript_AbilityHpHeal: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXRESTOREDHPALITTLE2 waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER + return + +BattleScript_RainDishActivates:: + call BattleScript_AbilityHpHeal + end3 + +BattleScript_CheekPouchActivates:: + copybyte sSAVED_BATTLER, gBattlerAttacker + copybyte gBattlerAttacker, gBattlerAbility + call BattleScript_AbilityHpHeal + copybyte gBattlerAttacker, sSAVED_BATTLER + return + +BattleScript_HarvestActivates:: + pause 5 + tryrecycleitem BattleScript_HarvestActivatesEnd + call BattleScript_AbilityPopUp + printstring STRINGID_HARVESTBERRY + waitmessage B_WAIT_TIME_LONG +BattleScript_HarvestActivatesEnd: + end3 + +BattleScript_SolarPowerActivates:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + call BattleScript_AbilityPopUp + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_SOLARPOWERHPDROP + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + end3 + +BattleScript_HealerActivates:: + call BattleScript_AbilityPopUp + curestatus BS_SCRIPTING + updatestatusicon BS_SCRIPTING + printstring STRINGID_HEALERCURE + waitmessage B_WAIT_TIME_LONG end3 BattleScript_SandstreamActivates:: @@ -3616,12 +7697,51 @@ BattleScript_SandstreamActivates:: call BattleScript_ActivateWeatherAbilities end3 +BattleScript_SandSpitActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ASANDSTORMKICKEDUP + waitstate + playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES + call BattleScript_ActivateWeatherAbilities + return + BattleScript_ShedSkinActivates:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXCUREDYPROBLEM waitmessage B_WAIT_TIME_LONG updatestatusicon BS_ATTACKER end3 +BattleScript_ActivateWeatherAbilities: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_ActivateWeatherAbilities_Loop: + copybyte sBATTLER, gBattlerTarget + activateweatherchangeabilities BS_TARGET +BattleScript_ActivateWeatherAbilities_Increment: + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop + restoretarget + return + +BattleScript_TryIntimidateHoldEffects: + itemstatchangeeffects BS_TARGET + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryIntimidateHoldEffectsRet + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, 12, BattleScript_TryIntimidateHoldEffectsRet + setstatchanger STAT_SPEED, 1, FALSE + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryIntimidateHoldEffectsRet + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + copybyte sBATTLER, gBattlerTarget + setlastuseditem BS_TARGET + printstring STRINGID_USINGITEMSTATOFPKMNROSE + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET +BattleScript_TryIntimidateHoldEffectsRet: + return + BattleScript_IntimidateActivates:: copybyte sSAVED_BATTLER, gBattlerTarget .if B_ABILITY_POP_UP == TRUE @@ -3681,6 +7801,58 @@ BattleScript_IntimidateInReverse: call BattleScript_TryIntimidateHoldEffects goto BattleScript_IntimidateLoopIncrement +BattleScript_SupersweetSyrupActivates:: + copybyte sSAVED_BATTLER, gBattlerTarget +.if B_ABILITY_POP_UP == TRUE + showabilitypopup BS_ATTACKER + pause B_WAIT_TIME_LONG + destroyabilitypopup +.endif + printstring STRINGID_SUPERSWEETAROMAWAFTS + waitmessage B_WAIT_TIME_LONG + setbyte gBattlerTarget, 0 +BattleScript_SupersweetSyrupLoop: + jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_SupersweetSyrupLoopIncrement + jumpiftargetally BattleScript_SupersweetSyrupLoopIncrement + jumpifabsent BS_TARGET, BattleScript_SupersweetSyrupLoopIncrement + jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_SupersweetSyrupLoopIncrement +BattleScript_SupersweetSyrupEffect: + copybyte sBATTLER, gBattlerAttacker + setstatchanger STAT_EVASION, 1, TRUE + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_SupersweetSyrupLoopIncrement + setgraphicalstatchangevalues + jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_SupersweetSyrupContrary + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SupersweetSyrupWontDecrease + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds +BattleScript_SupersweetSyrupEffect_WaitString: + waitmessage B_WAIT_TIME_LONG + copybyte sBATTLER, gBattlerTarget + call BattleScript_TryIntimidateHoldEffects +BattleScript_SupersweetSyrupLoopIncrement: + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop +BattleScript_SupersweetSyrupEnd: + copybyte sBATTLER, gBattlerAttacker + destroyabilitypopup + copybyte gBattlerTarget, sSAVED_BATTLER + pause B_WAIT_TIME_MED + end3 + +BattleScript_SupersweetSyrupWontDecrease: + printstring STRINGID_STATSWONTDECREASE + goto BattleScript_SupersweetSyrupEffect_WaitString + +BattleScript_SupersweetSyrupContrary: + call BattleScript_AbilityPopUpTarget + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SupersweetSyrupContrary_WontIncrease + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + goto BattleScript_SupersweetSyrupEffect_WaitString +BattleScript_SupersweetSyrupContrary_WontIncrease: + printstring STRINGID_TARGETSTATWONTGOHIGHER + goto BattleScript_SupersweetSyrupEffect_WaitString + BattleScript_DroughtActivates:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -3690,6 +7862,213 @@ BattleScript_DroughtActivates:: call BattleScript_ActivateWeatherAbilities end3 +BattleScript_DesolateLandActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_EXTREMELYHARSHSUNLIGHT + waitstate + playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_PrimalWeatherBlocksMove:: + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_ATTACKSTRING_PRINTED, BattleScript_MoveEnd @in case of multi-target moves, if move fails once, no point in printing the message twice + accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON + attackstring + pause B_WAIT_TIME_SHORT + ppreduce + printfromtable gPrimalWeatherBlocksStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_PrimordialSeaActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_HEAVYRAIN + waitstate + playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_DeltaStreamActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_MYSTERIOUSAIRCURRENT + waitstate + playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: animation B_ANIM_STRONG_WINDS + end3 + +BattleScript_ProtosynthesisActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_SUNLIGHTACTIVATEDABILITY + waitmessage B_WAIT_TIME_MED + printstring STRINGID_STATWASHEIGHTENED + waitmessage B_WAIT_TIME_MED + end3 + +BattleScript_QuarkDriveActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ELECTRICTERRAINACTIVATEDABILITY + waitmessage B_WAIT_TIME_MED + printstring STRINGID_STATWASHEIGHTENED + waitmessage B_WAIT_TIME_MED + end3 + +BattleScript_RuinAbilityActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_SupremeOverlordActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_CostarActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNCOPIEDSTATCHANGES + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_ZeroToHeroActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_ZEROTOHEROTRANSFORMATION + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_HospitalityActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_HOSPITALITYRESTORATION + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + end3 + +BattleScript_AttackWeakenedByStrongWinds:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MimicryActivates_End3:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_BATTLERTYPECHANGEDTO + waitmessage B_WAIT_TIME_SHORT + end3 + +BattleScript_SnowWarningActivatesHail:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_SNOWWARNINGHAIL + waitstate + playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_SnowWarningActivatesSnow:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_SNOWWARNINGSNOW + waitstate + playanimation BS_BATTLER_0, B_ANIM_MON_HIT @ TODO animation: B_ANIM_SNOW_CONTINUES + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_ActivateTerrainEffects: + savetarget + setbyte gBattlerTarget, 0 +BattleScript_ActivateTerrainSeed: + copybyte sBATTLER, gBattlerTarget + doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility + removeitem BS_TARGET +BattleScript_ActivateTerrainAbility: + activateterrainchangeabilities BS_TARGET +BattleScript_ActivateTerrainEffects_Increment: + addbyte gBattlerTarget, 0x1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed + restoretarget + return + +BattleScript_ElectricSurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESELECTRIC + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + end3 + +BattleScript_MistySurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESMISTY + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + end3 + +BattleScript_GrassySurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESGRASSY + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + end3 + +BattleScript_PsychicSurgeActivates:: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_TERRAINBECOMESPSYCHIC + waitmessage B_WAIT_TIME_LONG + playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG + call BattleScript_ActivateTerrainEffects + end3 + +BattleScript_BadDreamsActivates:: + setbyte gBattlerTarget, 0 +BattleScript_BadDreamsLoop: + jumpiftargetally BattleScript_BadDreamsIncrement + jumpifability BS_TARGET, ABILITY_MAGIC_GUARD, BattleScript_BadDreamsIncrement + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_BadDreams_Dmg + jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_BadDreams_Dmg + goto BattleScript_BadDreamsIncrement +BattleScript_BadDreams_Dmg: + jumpifbyteequal sFIXED_ABILITY_POPUP, sZero, BattleScript_BadDreams_ShowPopUp +BattleScript_BadDreams_DmgAfterPopUp: + printstring STRINGID_BADDREAMSDMG + waitmessage B_WAIT_TIME_LONG + dmg_1_8_targethp + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + jumpifhasnohp BS_TARGET, BattleScript_BadDreams_HidePopUp +BattleScript_BadDreamsIncrement: + addbyte gBattlerTarget, 1 + jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_BadDreamsLoop + jumpifbyteequal sFIXED_ABILITY_POPUP, sZero, BattleScript_BadDreamsEnd + destroyabilitypopup + pause 15 +BattleScript_BadDreamsEnd: + end3 +BattleScript_BadDreams_ShowPopUp: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setbyte sFIXED_ABILITY_POPUP, TRUE + goto BattleScript_BadDreams_DmgAfterPopUp +BattleScript_BadDreams_HidePopUp: + destroyabilitypopup + tryfaintmon BS_TARGET + goto BattleScript_BadDreamsIncrement + BattleScript_TookAttack:: attackstring pause B_WAIT_TIME_SHORT @@ -3700,27 +8079,54 @@ BattleScript_TookAttack:: BattleScript_SturdyPreventsOHKO:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPROTECTEDBY pause B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_DampStopsExplosion:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNPREVENTSUSAGE pause B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendto MOVEEND_NEXT_TARGET + moveendcase MOVEEND_CLEAR_BITS + end BattleScript_MoveHPDrain_PPLoss:: ppreduce BattleScript_MoveHPDrain:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_TARGET datahpupdate BS_TARGET printstring STRINGID_PKMNRESTOREDHPUSING waitmessage B_WAIT_TIME_LONG - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + goto BattleScript_MoveEnd + +BattleScript_MoveStatDrain_PPLoss:: + ppreduce +BattleScript_MoveStatDrain:: + attackstring + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont +.if B_ABSORBING_ABILITY_STRING >= GEN_5 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +.else + printstring STRINGID_TARGETABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG +.endif +BattleScript_MoveStatDrain_Cont: + clearsemiinvulnerablebit + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_MonMadeMoveUseless_PPLoss:: @@ -3728,9 +8134,11 @@ BattleScript_MonMadeMoveUseless_PPLoss:: BattleScript_MonMadeMoveUseless:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYUSELESS waitmessage B_WAIT_TIME_LONG - orbyte gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + tryfaintmon BS_ATTACKER + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE goto BattleScript_MoveEnd BattleScript_FlashFireBoost_PPLoss:: @@ -3738,22 +8146,32 @@ BattleScript_FlashFireBoost_PPLoss:: BattleScript_FlashFireBoost:: attackstring pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printfromtable gFlashFireStringIds waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER goto BattleScript_MoveEnd BattleScript_AbilityPreventsPhasingOut:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNANCHORSITSELFWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_AbilityNoStatLoss:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSSTATLOSSWITH waitmessage B_WAIT_TIME_LONG return +BattleScript_ItemNoStatLoss:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_CLEARAMULETWONTLOWERSTATS + waitmessage B_WAIT_TIME_LONG + return + BattleScript_BRNPrevention:: pause B_WAIT_TIME_SHORT printfromtable gBRNPreventionStringIds @@ -3774,18 +8192,21 @@ BattleScript_PSNPrevention:: BattleScript_ObliviousPreventsAttraction:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSROMANCEWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_FlinchPrevention:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXPREVENTSFLINCHING waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_OwnTempoPrevents:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNPREVENTSCONFUSIONWITH waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -3794,29 +8215,277 @@ BattleScript_SoundproofProtected:: attackstring ppreduce pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXBLOCKSY waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE + goto BattleScript_MoveEnd + +BattleScript_IceFaceNullsDamage:: + call BattleScript_TargetFormChangeWithString + return + +BattleScript_DazzlingProtected:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_POKEMONCANNOTUSEMOVE + waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_MoveUsedPsychicTerrainPrevents:: + printstring STRINGID_POKEMONCANNOTUSEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_GrassyTerrainHeals:: + setbyte gBattleCommunication, 0 +BattleScript_GrassyTerrainLoop: + copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 + checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement + printstring STRINGID_GRASSYTERRAINHEALS + waitmessage B_WAIT_TIME_LONG +BattleScript_GrassyTerrainHpChange: + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER +BattleScript_GrassyTerrainLoopIncrement:: + addbyte gBattleCommunication, 1 + jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop +BattleScript_GrassyTerrainLoopEnd:: + bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd +BattleScript_GrassyTerrainHealEnd: + end2 + BattleScript_AbilityNoSpecificStatLoss:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp +BattleScript_AbilityNoSpecificStatLossPrint: printstring STRINGID_PKMNSXPREVENTSYLOSS waitmessage B_WAIT_TIME_LONG - setbyte cMULTISTRING_CHOOSER, 3 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT return BattleScript_StickyHoldActivates:: pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXMADEYINEFFECTIVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd BattleScript_ColorChangeActivates:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNCHANGEDTYPEWITH waitmessage B_WAIT_TIME_LONG return -BattleScript_RoughSkinActivates:: +BattleScript_ProteanActivates:: + pause B_WAIT_TIME_SHORTEST + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNCHANGEDTYPE + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_CursedBodyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_CUSEDBODYDISABLED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_MummyActivates:: + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERACQUIREDABILITY + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_WanderingSpiritActivates:: +.if B_ABILITY_POP_UP == TRUE + setbyte sFIXED_ABILITY_POPUP, TRUE + sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT + showabilitypopup BS_TARGET + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_TARGET + pause 20 + destroyabilitypopup + pause 40 + copybyte gBattlerAbility, gBattlerAttacker + setbyte sFIXED_ABILITY_POPUP, TRUE + copyhword sABILITY_OVERWRITE, gLastUsedAbility + showabilitypopup BS_ATTACKER + pause 60 + sethword sABILITY_OVERWRITE, 0 + updateabilitypopup BS_ATTACKER + pause 20 + destroyabilitypopup + pause 40 +.endif + printstring STRINGID_SWAPPEDABILITIES + waitmessage B_WAIT_TIME_LONG + switchinabilities BS_ATTACKER + switchinabilities BS_TARGET + return + +BattleScript_TargetsStatWasMaxedOut:: + call BattleScript_AbilityPopUp + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETSSTATWASMAXEDOUT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_BATTLERABILITYRAISEDSTAT + waitmessage B_WAIT_TIME_LONG + copybyte gBattlerAttacker, sSAVED_BATTLER + end3 + +BattleScript_ScriptingAbilityStatRaise:: + copybyte gBattlerAbility, sBATTLER + call BattleScript_AbilityPopUp + copybyte sSAVED_DMG, gBattlerAttacker + copybyte gBattlerAttacker, sBATTLER + statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG + copybyte gBattlerAttacker, sSAVED_DMG + return + +BattleScript_WeakArmorActivates:: + call BattleScript_AbilityPopUp + setstatchanger STAT_DEF, 1, TRUE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed + pause B_WAIT_TIME_SHORTEST + printfromtable gStatDownStringIds + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @ Set by statbuffchange when stat can't be decreased + waitmessage B_WAIT_TIME_LONG + goto BattleScript_WeakArmorActivatesSpeed +BattleScript_WeakArmorDefAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETABILITYSTATLOWER + waitmessage B_WAIT_TIME_LONG +BattleScript_WeakArmorActivatesSpeed: +.if B_WEAK_ARMOR_SPEED >= GEN_7 + setstatchanger STAT_SPEED, 2, FALSE +.else + setstatchanger STAT_SPEED, 1, FALSE +.endif + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd + jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_WeakArmorActivatesEnd +BattleScript_WeakArmorSpeedAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_TARGETABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG +BattleScript_WeakArmorActivatesEnd: + return + +BattleScript_RaiseStatOnFaintingTarget:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_LASTABILITYRAISEDSTAT + waitmessage B_WAIT_TIME_LONG +BattleScript_RaiseStatOnFaintingTarget_End: + return + +BattleScript_AttackerAbilityStatRaise:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackerAbilityStatRaise_End + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + waitanimation + printstring STRINGID_ATTACKERABILITYSTATRAISE + waitmessage B_WAIT_TIME_LONG +BattleScript_AttackerAbilityStatRaise_End: + return + +BattleScript_FellStingerRaisesStat:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd + jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_FellStingerRaisesAtkEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_FellStingerRaisesAtkEnd: + return + +BattleScript_AttackerAbilityStatRaiseEnd3:: + call BattleScript_AttackerAbilityStatRaise + end3 + +BattleScript_SwitchInAbilityMsg:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_SwitchInAbilityMsgRet:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ActivateAsOne:: + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + @ show unnerve + sethword sABILITY_OVERWRITE, ABILITY_UNNERVE + setbyte cMULTISTRING_CHOOSER, B_MSG_SWITCHIN_UNNERVE + call BattleScript_AbilityPopUp + printfromtable gSwitchInAbilityStringIds + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_FriskMsgWithPopup:: + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp +BattleScript_FriskMsg:: + printstring STRINGID_FRISKACTIVATES + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_FriskActivates:: + tryfriskmsg BS_ATTACKER + end3 + +BattleScript_ImposterActivates:: + call BattleScript_AbilityPopUp + transformdataexecution + playmoveanimation BS_ATTACKER, MOVE_TRANSFORM + waitanimation + printstring STRINGID_IMPOSTERTRANSFORM + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_HurtAttacker: orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER @@ -3825,28 +8494,124 @@ BattleScript_RoughSkinActivates:: tryfaintmon BS_ATTACKER return +BattleScript_RoughSkinActivates:: + call BattleScript_AbilityPopUp + call BattleScript_HurtAttacker + return + +BattleScript_RockyHelmetActivates:: + @ don't play the animation for a fainted mon + jumpifabsent BS_TARGET, BattleScript_RockyHelmetActivatesDmg + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation +BattleScript_RockyHelmetActivatesDmg: + call BattleScript_HurtAttacker + return + +BattleScript_SpikyShieldEffect:: + jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_PKMNHURTSWITH + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED +BattleScript_SpikyShieldRet:: + return + +BattleScript_KingsShieldEffect:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + seteffectsecondary + copybyte sBATTLER, gBattlerTarget + copybyte gBattlerTarget, gBattlerAttacker + copybyte gBattlerAttacker, sBATTLER + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED + return + +BattleScript_BanefulBunkerEffect:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE + bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + seteffectsecondary + orhalfword gMoveResultFlags, MOVE_RESULT_MISSED + return + BattleScript_CuteCharmActivates:: + call BattleScript_AbilityPopUp status2animation BS_ATTACKER, STATUS2_INFATUATION printstring STRINGID_PKMNSXINFATUATEDY waitmessage B_WAIT_TIME_LONG + call BattleScript_TryDestinyKnotTarget return -BattleScript_ApplySecondaryEffect:: +BattleScript_GooeyActivates:: waitstate + call BattleScript_AbilityPopUp + swapattackerwithtarget @ for defiant, mirror armor + seteffectsecondary MOVE_EFFECT_SPD_MINUS_1 + swapattackerwithtarget + return + +BattleScript_AbilityStatusEffect:: + waitstate + call BattleScript_AbilityPopUp seteffectsecondary return +BattleScript_BattleBondActivatesOnMoveEndAttacker:: + pause 5 + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_ATTACKERBECAMEFULLYCHARGED + handleformchange BS_ATTACKER, 0 + handleformchange BS_ATTACKER, 1 + playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE + waitanimation + handleformchange BS_ATTACKER, 2 + printstring STRINGID_ATTACKERBECAMEASHSPECIES + return + +BattleScript_DancerActivates:: + call BattleScript_AbilityPopUp + waitmessage B_WAIT_TIME_SHORT + setbyte sB_ANIM_TURN, 0 + setbyte sB_ANIM_TARGETS_HIT, 0 + orword gHitMarker, HITMARKER_ALLOW_NO_PP + jumptocalledmove TRUE + BattleScript_SynchronizeActivates:: waitstate + call BattleScript_AbilityPopUp seteffectprimary return +BattleScript_NoItemSteal:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNSXMADEYINEFFECTIVE + waitmessage B_WAIT_TIME_LONG + return + BattleScript_AbilityCuredStatus:: + call BattleScript_AbilityPopUp printstring STRINGID_PKMNSXCUREDITSYPROBLEM waitmessage B_WAIT_TIME_LONG updatestatusicon BS_SCRIPTING return +BattleScript_BattlerShookOffTaunt:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNSHOOKOFFTHETAUNT + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_BattlerGotOverItsInfatuation:: + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNGOTOVERITSINFATUATION + waitmessage B_WAIT_TIME_LONG + return + BattleScript_IgnoresWhileAsleep:: printstring STRINGID_PKMNIGNORESASLEEP waitmessage B_WAIT_TIME_LONG @@ -3856,7 +8621,11 @@ BattleScript_IgnoresWhileAsleep:: BattleScript_IgnoresAndUsesRandomMove:: printstring STRINGID_PKMNIGNOREDORDERS waitmessage B_WAIT_TIME_LONG - jumptocalledmove 0 + setbyte sMOVE_EFFECT, 0 + jumptocalledmove FALSE + +BattleScript_MoveUsedLoafingAround:: + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_LOAFING, BattleScript_MoveUsedLoafingAroundMsg BattleScript_MoveUsedLoafingAroundMsg:: printfromtable gInobedientStringIds waitmessage B_WAIT_TIME_LONG @@ -3869,8 +8638,7 @@ BattleScript_TruantLoafingAround:: BattleScript_IgnoresAndFallsAsleep:: printstring STRINGID_PKMNBEGANTONAP waitmessage B_WAIT_TIME_LONG - setmoveeffect MOVE_EFFECT_SLEEP | MOVE_EFFECT_AFFECTS_USER - seteffectprimary + seteffectprimary MOVE_EFFECT_SLEEP | MOVE_EFFECT_AFFECTS_USER moveendto MOVEEND_NEXT_TARGET end @@ -3932,6 +8700,18 @@ BattleScript_BerryCureFrzRet:: removeitem BS_SCRIPTING return +BattleScript_BerryCureFrbEnd2:: + call BattleScript_BerryCureFrzRet + end2 + +BattleScript_BerryCureFrbRet:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMHEALEDFROSTBITE + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_SCRIPTING + removeitem BS_SCRIPTING + return + BattleScript_BerryCureSlpEnd2:: call BattleScript_BerryCureSlpRet end2 @@ -3944,6 +8724,30 @@ BattleScript_BerryCureSlpRet:: removeitem BS_SCRIPTING return +BattleScript_GemActivates:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setlastuseditem BS_ATTACKER + printstring STRINGID_GEMACTIVATES + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + return + +BattleScript_BerryReduceDmg:: + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation + setlastuseditem BS_TARGET + printstring STRINGID_TARGETATEITEM + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_PrintBerryReduceString:: + waitmessage B_WAIT_TIME_LONG + printstring STRINGID_BERRYDMGREDUCES + waitmessage B_WAIT_TIME_LONG + return + BattleScript_BerryCureConfusionEnd2:: call BattleScript_BerryCureConfusionRet end2 @@ -3967,6 +8771,19 @@ BattleScript_BerryCureChosenStatusRet:: removeitem BS_SCRIPTING return +BattleScript_MentalHerbCureRet:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printfromtable gMentalHerbCureStringIds + waitmessage B_WAIT_TIME_LONG + updatestatusicon BS_SCRIPTING + removeitem BS_SCRIPTING + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + return + +BattleScript_MentalHerbCureEnd2:: + call BattleScript_MentalHerbCureRet + end2 + BattleScript_WhiteHerbEnd2:: call BattleScript_WhiteHerbRet end2 @@ -3978,1430 +8795,21 @@ BattleScript_WhiteHerbRet:: removeitem BS_SCRIPTING return -BattleScript_ItemHealHP_RemoveItem:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT +BattleScript_ItemHealHP_RemoveItemRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp + goto BattleScript_ItemHealHP_RemoveItemRet_Anim +BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp: + call BattleScript_AbilityPopUp +BattleScript_ItemHealHP_RemoveItemRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - removeitem BS_ATTACKER - end2 - -BattleScript_BerryPPHealEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMRESTOREDPP - waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER - end2 - -BattleScript_ItemHealHP_End2:: - call BattleScript_ItemHealHP_Ret - end2 - -BattleScript_ItemHealHP_Ret:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - return - -BattleScript_SelectingNotAllowedMoveChoiceItem:: - printselectionstring STRINGID_ITEMALLOWSONLYYMOVE - endselectionscript - -BattleScript_FocusBandActivates:: - playanimation BS_TARGET, B_ANIM_HANGED_ON - printstring STRINGID_PKMNHUNGONWITHX - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_BerryConfuseHealEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMRESTOREDHEALTH - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG - setmoveeffect MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER - seteffectprimary - removeitem BS_ATTACKER - end2 - -BattleScript_BerryStatRaiseEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseDoStatUp -BattleScript_BerryStatRaiseDoStatUp:: - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM - call BattleScript_StatUp - removeitem BS_ATTACKER - end2 - -BattleScript_BerryFocusEnergyEnd2:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNUSEDXTOGETPUMPED - waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER - end2 - -BattleScript_ActionSelectionItemsCantBeUsed:: - printselectionstring STRINGID_ITEMSCANTBEUSEDNOW - endselectionscript - -BattleScript_FlushMessageBox:: - printstring STRINGID_EMPTYSTRING3 - return - -@ pokeemerald -BattleScript_AbilityPopUpTarget: - copybyte gBattlerAbility, gBattlerTarget -BattleScript_AbilityPopUp: - .if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_ABILITY_BATTLER - pause 40 - .endif - recordability BS_ABILITY_BATTLER - sethword sABILITY_OVERWRITE, 0 - return - -BattleScript_ProteanActivates:: - pause B_WAIT_TIME_SHORTEST - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNCHANGEDTYPE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MoveUsedPsychicTerrainPrevents:: - printstring STRINGID_POKEMONCANNOTUSEMOVE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_FlingFailConsumeItem:: - removeitem BS_ATTACKER - goto BattleScript_FailedFromAtkString - -BattleScript_MoveUsedHealBlockPrevents:: - printstring STRINGID_HEALBLOCKPREVENTSUSAGE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_MoveUsedGravityPrevents:: - printstring STRINGID_GRAVITYPREVENTSUSAGE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_MoveUsedUnfrostbite:: - printfromtable gFrostbiteHealedStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_ATTACKER - return - -BattleScript_PowderMoveNoEffect:: - attackstring - ppreduce - pause B_WAIT_TIME_SHORT - jumpiftype BS_TARGET, TYPE_GRASS, BattleScript_PowderMoveNoEffectPrint - jumpifability BS_TARGET, ABILITY_OVERCOAT, BattleScript_PowderMoveNoEffectOvercoat - printstring STRINGID_SAFETYGOGGLESPROTECTED - goto BattleScript_PowderMoveNoEffectWaitMsg -BattleScript_PowderMoveNoEffectOvercoat: - call BattleScript_AbilityPopUp -BattleScript_PowderMoveNoEffectPrint: - printstring STRINGID_ITDOESNTAFFECT -BattleScript_PowderMoveNoEffectWaitMsg: - waitmessage B_WAIT_TIME_LONG - cancelmultiturnmoves BS_ATTACKER - sethword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_MoveUsedPowder:: - bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_ATTACKSTRING_PRINTED - attackstring - ppreduce - pause B_WAIT_TIME_SHORT - cancelmultiturnmoves BS_ATTACKER - status2animation BS_ATTACKER, STATUS2_POWDER - waitanimation - effectivenesssound - hitanimation BS_ATTACKER - waitstate - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_POWDEREXPLODES - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER - goto BattleScript_MoveEnd - -BattleScript_MoveUsedIsThroatChopPrevented:: - printstring STRINGID_PKMNCANTUSEMOVETHROATCHOP - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_PrimalWeatherBlocksMove:: - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_ATTACKSTRING_PRINTED, BattleScript_MoveEnd @in case of multi-target moves, if move fails once, no point in printing the message twice - accuracycheck BattleScript_PrintMoveMissed, NO_ACC_CALC_CHECK_LOCK_ON - attackstring - pause B_WAIT_TIME_SHORT - ppreduce - printfromtable gPrimalWeatherBlocksStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_BerryReduceDmg:: - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - waitanimation - setlastuseditem BS_TARGET - printstring STRINGID_TARGETATEITEM - waitmessage B_WAIT_TIME_LONG - removeitem BS_TARGET - return - -BattleScript_GemActivates:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - waitanimation - setlastuseditem BS_ATTACKER - printstring STRINGID_GEMACTIVATES - waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER - return - -BattleScript_AttackWeakenedByStrongWinds:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SturdiedMsg:: - pause B_WAIT_TIME_SHORTEST - call BattleScript_AbilityPopUpTarget - printstring STRINGID_ENDUREDSTURDY - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_HangedOnMsg:: - playanimation BS_TARGET, B_ANIM_HANGED_ON - printstring STRINGID_PKMNHUNGONWITHX - waitmessage B_WAIT_TIME_LONG - jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_FOCUS_SASH, BattleScript_HangedOnMsgRet - removeitem BS_TARGET -BattleScript_HangedOnMsgRet: - return - -BattleScript_PrintBerryReduceString:: - waitmessage B_WAIT_TIME_LONG - printstring STRINGID_BERRYDMGREDUCES - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_TargetFormChangeNoPopup: - flushtextbox - handleformchange BS_SCRIPTING, 0 - handleformchange BS_SCRIPTING, 1 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE - waitanimation - handleformchange BS_SCRIPTING, 2 - .if B_DISGUISE_HP_LOSS >= GEN_8 + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING - .endif - return - -BattleScript_TargetFormChange:: - pause 5 - call BattleScript_AbilityPopUpTarget - call BattleScript_TargetFormChangeNoPopup - return - -BattleScript_TargetFormChangeWithString:: - pause 5 - call BattleScript_AbilityPopUpTarget - call BattleScript_TargetFormChangeNoPopup - printstring STRINGID_PKMNTRANSFORMED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_TargetFormChangeWithStringNoPopup:: - call BattleScript_TargetFormChangeNoPopup - printstring STRINGID_PKMNTRANSFORMED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_IceFaceNullsDamage:: - call BattleScript_TargetFormChangeWithString - return - -BattleScript_AffectionBasedEndurance:: -@ playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON @ TODO: Animation - printstring STRINGID_TARGETTOUGHEDITOUT - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MoveEffectClearSmog:: - printstring STRINGID_RESETSTARGETSSTATLEVELS - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MoveEffectFlameBurst:: - tryfaintmon BS_TARGET - copybyte sBATTLER, sSAVED_BATTLER - printstring STRINGID_BURSTINGFLAMESHIT - waitmessage B_WAIT_TIME_LONG - savetarget - copybyte gBattlerTarget, sSAVED_BATTLER - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - tryfaintmon BS_TARGET - restoretarget - goto BattleScript_MoveEnd - -BattleScript_HyperspaceFuryRemoveProtect:: - printstring STRINGID_BROKETHROUGHPROTECTION - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MoveEffectFeint:: - printstring STRINGID_FELLFORFEINT - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SpectralThiefSteal:: - printstring STRINGID_SPECTRALTHIEFSTEAL - waitmessage B_WAIT_TIME_LONG - setbyte sB_ANIM_ARG2, 0 - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - spectralthiefprintstats - return - -BattleScript_VCreateStatLoss:: - jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim - jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_VCreateStatAnim - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_VCreateStatLossRet -BattleScript_VCreateStatAnim: - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF | BIT_SPEED, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT - setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpDef - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpDef - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_VCreateTrySpDef: - setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateTrySpeed - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_VCreateTrySpeed: - setstatchanger STAT_SPEED, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, BattleScript_VCreateStatLossRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_VCreateStatLossRet - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_VCreateStatLossRet: - return - -BattleScript_MoveEffectCoreEnforcer:: - setgastroacid BattleScript_CoreEnforcerRet - printstring STRINGID_PKMNSABILITYSUPPRESSED - waitmessage B_WAIT_TIME_LONG - trytoclearprimalweather - tryrevertweatherform - flushtextbox -BattleScript_CoreEnforcerRet: - return - -BattleScript_MoveEffectIncinerate:: - printstring STRINGID_INCINERATEBURN - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MoveEffectBugBite:: - printstring STRINGID_BUGBITE - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_DISABLE_ANIMATION - setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries - savetarget - consumeberry BS_ATTACKER, FALSE - bicword gHitMarker, HITMARKER_DISABLE_ANIMATION - setbyte sBERRY_OVERRIDE, 0 - trysymbiosis - restoretarget - return - -BattleScript_BothCanNoLongerEscape:: - printstring STRINGID_BOTHCANNOLONGERESCAPE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_RemoveFireType:: - printstring STRINGID_ATTACKERLOSTFIRETYPE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_RemoveElectricType:: - printstring STRINGID_ATTACKERLOSTELECTRICTYPE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_RemoveGenericType:: - printstring STRINGID_ATTACKERLOSTITSTYPE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_StealthRockActivates:: - setstealthrock BattleScript_MoveEnd - printfromtable gDmgHazardsStringIds - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SpikesActivates:: - trysetspikes BattleScript_MoveEnd - printfromtable gDmgHazardsStringIds - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SyrupBombActivates:: - printstring STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_AromaVeilProtectsRet:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_AROMAVEILPROTECTED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_EffectPsychicNoise:: - printstring STRINGID_PKMNPREVENTEDFROMHEALING - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SymbiosisActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_SYMBIOSISITEMPASS - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_NoItemSteal:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNSXMADEYINEFFECTIVE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_OverworldStatusStarts:: - printfromtable gStartingStatusStringIds - waitmessage B_WAIT_TIME_LONG - playanimation_var BS_ATTACKER, sB_ANIM_ARG1 - call BattleScript_OverworldStatusStarts_TryActivations - end3 - -BattleScript_OverworldStatusStarts_TryActivations: - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TRICK_ROOM, BattleScript_TryRoomServiceLoop - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TAILWIND_PLAYER, BattleScript_TryTailwindAbilitiesLoop - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_SET_TAILWIND_OPPONENT, BattleScript_TryTailwindAbilitiesLoop - return - -BattleScript_TryRoomServiceLoop: - savetarget - setbyte gBattlerTarget, 0 -BattleScript_RoomServiceLoop: - copybyte sBATTLER, gBattlerTarget - tryroomservice BS_TARGET, BattleScript_RoomServiceLoop_NextBattler - removeitem BS_TARGET -BattleScript_RoomServiceLoop_NextBattler: - addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_RoomServiceLoop - restoretarget - return - -BattleScript_TryTailwindAbilitiesLoop: - savetarget - setbyte gBattlerTarget, 0 -BattleScript_TryTailwindAbilitiesLoop_Iter: - trywindriderpower BS_TARGET, BattleScript_TryTailwindAbilitiesLoop_Increment - jumpifability BS_TARGET, ABILITY_WIND_RIDER, BattleScript_TryTailwindAbilitiesLoop_WindRider - jumpifability BS_TARGET, ABILITY_WIND_POWER, BattleScript_TryTailwindAbilitiesLoop_WindPower -BattleScript_TryTailwindAbilitiesLoop_Increment: - addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TryTailwindAbilitiesLoop_Iter -BattleScript_TryTailwindAbilitiesLoop_Ret: - restoretarget - return - -BattleScript_TryTailwindAbilitiesLoop_WindRider: - call BattleScript_AbilityPopUp - modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_TryTailwindAbilitiesLoop_Increment, ANIM_ON - goto BattleScript_TryTailwindAbilitiesLoop_Increment - -BattleScript_TryTailwindAbilitiesLoop_WindPower: - call BattleScript_AbilityPopUp - setcharge BS_TARGET - printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TryTailwindAbilitiesLoop_Increment - -BattleScript_OverworldTerrain:: - printfromtable gTerrainStringIds - waitmessage B_WAIT_TIME_LONG - playanimation BS_BATTLER_0, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - end3 - -BattleScript_ImposterActivates:: - call BattleScript_AbilityPopUp - transformdataexecution - playmoveanimation BS_ATTACKER, MOVE_TRANSFORM - waitanimation - printstring STRINGID_IMPOSTERTRANSFORM - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_SwitchInAbilityMsg:: - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_SwitchInAbilityMsgRet:: - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_ActivateAsOne:: - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - @ show unnerve - sethword sABILITY_OVERWRITE, ABILITY_UNNERVE - setbyte cMULTISTRING_CHOOSER, B_MSG_SWITCHIN_UNNERVE - call BattleScript_AbilityPopUp - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_PastelVeilActivates:: - setbyte gBattleCommunication, 0 - setbyte gBattleCommunication + 1, 0 -BattleScript_PastelVeil_TryCurePoison: - jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison - goto BattleScript_PastelVeilLoopIncrement -BattleScript_PastelVeilCurePoison: - jumpifbyte CMP_NOT_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_PastelVeilCurePoisonNoPopUp - call BattleScript_AbilityPopUp - setbyte gBattleCommunication + 1, 1 -BattleScript_PastelVeilCurePoisonNoPopUp: @ Only show Pastel Veil pop up once if it cures two mons - printfromtable gSwitchInAbilityStringIds - waitmessage B_WAIT_TIME_LONG - curestatus BS_TARGET - updatestatusicon BS_TARGET -BattleScript_PastelVeilLoopIncrement: - jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd - addbyte gBattleCommunication, 1 - jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd - setallytonexttarget BattleScript_PastelVeil_TryCurePoison - goto BattleScript_PastelVeilEnd -BattleScript_PastelVeilEnd: - end3 - -BattleScript_FriskActivates:: - tryfriskmsg BS_ATTACKER - end3 - -BattleScript_AttackerAbilityStatRaiseEnd3:: - call BattleScript_AttackerAbilityStatRaise - end3 - -BattleScript_BlockedByPrimalWeatherEnd3:: - call BattleScript_AbilityPopUp - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3 - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainEnd3 - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnEnd3 - end3 - -BattleScript_SnowWarningActivatesHail:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_SNOWWARNINGHAIL - waitstate - playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES - call BattleScript_ActivateWeatherAbilities - end3 - -BattleScript_SnowWarningActivatesSnow:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_SNOWWARNINGSNOW - waitstate - playanimation BS_BATTLER_0, B_ANIM_HAIL_CONTINUES @ TODO: Animation B_ANIM_SNOW_CONTINUES - call BattleScript_ActivateWeatherAbilities - end3 - -BattleScript_ElectricSurgeActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_TERRAINBECOMESELECTRIC - waitmessage B_WAIT_TIME_LONG - playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - end3 - -BattleScript_GrassySurgeActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_TERRAINBECOMESGRASSY - waitmessage B_WAIT_TIME_LONG - playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - end3 - -BattleScript_MistySurgeActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_TERRAINBECOMESMISTY - waitmessage B_WAIT_TIME_LONG - playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - end3 - -BattleScript_PsychicSurgeActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_TERRAINBECOMESPSYCHIC - waitmessage B_WAIT_TIME_LONG - playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - end3 - -BattleScript_SupersweetSyrupActivates:: - copybyte sSAVED_BATTLER, gBattlerTarget -.if B_ABILITY_POP_UP == TRUE - showabilitypopup BS_ATTACKER - pause B_WAIT_TIME_LONG - destroyabilitypopup -.endif - printstring STRINGID_SUPERSWEETAROMAWAFTS - waitmessage B_WAIT_TIME_LONG - setbyte gBattlerTarget, 0 -BattleScript_SupersweetSyrupLoop: - jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_SupersweetSyrupLoopIncrement - jumpiftargetally BattleScript_SupersweetSyrupLoopIncrement - jumpifabsent BS_TARGET, BattleScript_SupersweetSyrupLoopIncrement - jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_SupersweetSyrupLoopIncrement -BattleScript_SupersweetSyrupEffect: - copybyte sBATTLER, gBattlerAttacker - setstatchanger STAT_EVASION, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_SupersweetSyrupLoopIncrement - setgraphicalstatchangevalues - jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_SupersweetSyrupContrary - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SupersweetSyrupWontDecrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatDownStringIds -BattleScript_SupersweetSyrupEffect_WaitString: - waitmessage B_WAIT_TIME_LONG - copybyte sBATTLER, gBattlerTarget - call BattleScript_TryIntimidateHoldEffects -BattleScript_SupersweetSyrupLoopIncrement: - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop -BattleScript_SupersweetSyrupEnd: - copybyte sBATTLER, gBattlerAttacker - destroyabilitypopup - copybyte gBattlerTarget, sSAVED_BATTLER - pause B_WAIT_TIME_MED - end3 - -BattleScript_AnnounceAirLockCloudNine:: - call BattleScript_AbilityPopUp - printstring STRINGID_AIRLOCKACTIVATES - waitmessage B_WAIT_TIME_LONG - call BattleScript_ActivateWeatherAbilities - end3 - -BattleScript_AttackerFormChangeEnd3:: - call BattleScript_AttackerFormChange - end3 - -BattleScript_AttackerFormChangeEnd3NoPopup:: - call BattleScript_AttackerFormChangeNoPopup - end3 - -BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_BATTLERABILITYRAISEDSTAT - waitmessage B_WAIT_TIME_LONG - copybyte gBattlerAttacker, sSAVED_BATTLER - end3 - -BattleScript_DesolateLandActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_EXTREMELYHARSHSUNLIGHT - waitstate - playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES - call BattleScript_ActivateWeatherAbilities - end3 - -BattleScript_PrimordialSeaActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_HEAVYRAIN - waitstate - playanimation BS_BATTLER_0, B_ANIM_RAIN_CONTINUES - call BattleScript_ActivateWeatherAbilities - end3 - -BattleScript_DeltaStreamActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_MYSTERIOUSAIRCURRENT - waitstate - playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: Animation B_ANIM_STRONG_WINDS - end3 - -BattleScript_RuinAbilityActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_SupremeOverlordActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_CostarActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNCOPIEDSTATCHANGES - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_ZeroToHeroActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_ZEROTOHEROTRANSFORMATION - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_HospitalityActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_HOSPITALITYRESTORATION - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - end3 - -BattleScript_HarvestActivates:: - pause 5 - tryrecycleitem BattleScript_HarvestActivatesEnd - call BattleScript_AbilityPopUp - printstring STRINGID_HARVESTBERRY - waitmessage B_WAIT_TIME_LONG -BattleScript_HarvestActivatesEnd: - end3 - -@ Can't compare directly to a value, have to compare to value at pointer -sZero: -.byte 0 - -BattleScript_MoodyActivates:: - call BattleScript_AbilityPopUp - jumpifbyteequal sSTATCHANGER, sZero, BattleScript_MoodyLower - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyLower - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_MoodyLower - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_MoodyLower: - jumpifbyteequal sSAVED_STAT_CHANGER, sZero, BattleScript_MoodyEnd - copybyte sSTATCHANGER, sSAVED_STAT_CHANGER - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_MoodyEnd - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_FELL, BattleScript_MoodyEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_MoodyEnd: - end3 - -BattleScript_BadDreamsActivates:: - setbyte gBattlerTarget, 0 -BattleScript_BadDreamsLoop: - jumpiftargetally BattleScript_BadDreamsIncrement - jumpifability BS_TARGET, ABILITY_MAGIC_GUARD, BattleScript_BadDreamsIncrement - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_BadDreams_Dmg - jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_BadDreams_Dmg - goto BattleScript_BadDreamsIncrement -BattleScript_BadDreams_Dmg: - jumpifbyteequal sFIXED_ABILITY_POPUP, sZero, BattleScript_BadDreams_ShowPopUp -BattleScript_BadDreams_DmgAfterPopUp: - printstring STRINGID_BADDREAMSDMG - waitmessage B_WAIT_TIME_LONG - dmg_1_8_targethp - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - jumpifhasnohp BS_TARGET, BattleScript_BadDreams_HidePopUp -BattleScript_BadDreamsIncrement: - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_BadDreamsLoop - jumpifbyteequal sFIXED_ABILITY_POPUP, sZero, BattleScript_BadDreamsEnd - destroyabilitypopup - pause 15 -BattleScript_BadDreamsEnd: - end3 -BattleScript_BadDreams_ShowPopUp: - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - setbyte sFIXED_ABILITY_POPUP, TRUE - goto BattleScript_BadDreams_DmgAfterPopUp -BattleScript_BadDreams_HidePopUp: - destroyabilitypopup - tryfaintmon BS_TARGET - goto BattleScript_BadDreamsIncrement - -BattleScript_SolarPowerActivates:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - call BattleScript_AbilityPopUp - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_SOLARPOWERHPDROP - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER - end3 - -BattleScript_HealerActivates:: - call BattleScript_AbilityPopUp - curestatus BS_SCRIPTING - updatestatusicon BS_SCRIPTING - printstring STRINGID_HEALERCURE - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_BallFetch:: - call BattleScript_AbilityPopUp - printstring STRINGID_FETCHEDPOKEBALL - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_CudChewActivates:: - pause B_WAIT_TIME_SHORTEST - call BattleScript_AbilityPopUp - setbyte sBERRY_OVERRIDE, 1 @ override the requirements for eating berries - consumeberry BS_SCRIPTING, FALSE - setbyte sBERRY_OVERRIDE, 0 - end3 - -BattleScript_DazzlingProtected:: - attackstring - ppreduce - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_POKEMONCANNOTUSEMOVE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_DarkTypePreventsPrankster:: - attackstring - ppreduce - pause B_WAIT_TIME_SHORT - printstring STRINGID_ITDOESNTAFFECT - waitmessage B_WAIT_TIME_LONG - orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - goto BattleScript_MoveEnd - -BattleScript_GoodAsGoldActivates:: - attackstring - ppreduce - call BattleScript_AbilityPopUpTarget - pause B_WAIT_TIME_SHORT - printstring STRINGID_ITDOESNTAFFECT - waitmessage B_WAIT_TIME_MED - goto BattleScript_MoveEnd - -BattleScript_MoveStatDrain_PPLoss:: - ppreduce -BattleScript_MoveStatDrain:: - attackstring - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MoveStatDrain_Cont -.if B_ABSORBING_ABILITY_STRING >= GEN_5 - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG -.else - printstring STRINGID_TARGETABILITYSTATRAISE - waitmessage B_WAIT_TIME_LONG -.endif -BattleScript_MoveStatDrain_Cont: - clearsemiinvulnerablebit - tryfaintmon BS_ATTACKER - goto BattleScript_MoveEnd - -BattleScript_TargetAbilityStatRaiseRet:: - copybyte sSAVED_BATTLER, gBattlerAttacker - copybyte gBattlerAbility, gEffectBattler - copybyte gBattlerAttacker, gBattlerTarget - call BattleScript_AbilityPopUp - statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN, BattleScript_TargetAbilityStatRaiseRet_End - setgraphicalstatchangevalues - call BattleScript_StatUp -BattleScript_TargetAbilityStatRaiseRet_End: - copybyte gBattlerAttacker, sSAVED_BATTLER - return - -BattleScript_WeakArmorActivates:: - call BattleScript_AbilityPopUp - setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesSpeed - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_WeakArmorDefAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed - pause B_WAIT_TIME_SHORTEST - printfromtable gStatDownStringIds - bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @ Set by statbuffchange when stat can't be decreased - waitmessage B_WAIT_TIME_LONG - goto BattleScript_WeakArmorActivatesSpeed -BattleScript_WeakArmorDefAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_TARGETABILITYSTATLOWER - waitmessage B_WAIT_TIME_LONG -BattleScript_WeakArmorActivatesSpeed: -.if B_WEAK_ARMOR_SPEED >= GEN_7 - setstatchanger STAT_SPEED, 2, FALSE -.else - setstatchanger STAT_SPEED, 1, FALSE -.endif - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd - pause B_WAIT_TIME_SHORTEST - printstring STRINGID_TARGETSTATWONTGOHIGHER - bichalfword gMoveResultFlags, MOVE_RESULT_MISSED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_WeakArmorActivatesEnd -BattleScript_WeakArmorSpeedAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_TARGETABILITYSTATRAISE - waitmessage B_WAIT_TIME_LONG -BattleScript_WeakArmorActivatesEnd: - return - -BattleScript_CursedBodyActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_CUSEDBODYDISABLED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MummyActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_ATTACKERACQUIREDABILITY - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_WanderingSpiritActivates:: -.if B_ABILITY_POP_UP == TRUE - setbyte sFIXED_ABILITY_POPUP, TRUE - sethword sABILITY_OVERWRITE, ABILITY_WANDERING_SPIRIT - showabilitypopup BS_TARGET - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_TARGET - pause 20 - destroyabilitypopup - pause 40 - copybyte gBattlerAbility, gBattlerAttacker - setbyte sFIXED_ABILITY_POPUP, TRUE - copyhword sABILITY_OVERWRITE, gLastUsedAbility - showabilitypopup BS_ATTACKER - pause 60 - sethword sABILITY_OVERWRITE, 0 - updateabilitypopup BS_ATTACKER - pause 20 - destroyabilitypopup - pause 40 -.endif - printstring STRINGID_SWAPPEDABILITIES - waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER - switchinabilities BS_TARGET - return - -BattleScript_TargetsStatWasMaxedOut:: - call BattleScript_AbilityPopUp - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_TARGETSSTATWASMAXEDOUT - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_GooeyActivates:: - waitstate - call BattleScript_AbilityPopUp - swapattackerwithtarget @ for defiant, mirror armor - seteffectsecondary MOVE_EFFECT_SPD_MINUS_1 - swapattackerwithtarget - return - -BattleScript_DampPreventsAftermath:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - pause 40 - copybyte gBattlerAbility, sBATTLER - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNSABILITYPREVENTSABILITY - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_AftermathDmg:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_AftermathDmgRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_AFTERMATHDMG - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER -BattleScript_AftermathDmgRet: - return - -BattleScript_AbilityStatusEffect:: - waitstate - call BattleScript_AbilityPopUp - seteffectsecondary - return - -BattleScript_IllusionOff:: - spriteignore0hp TRUE - playanimation BS_TARGET, B_ANIM_MON_HIT @ TODO: Animation B_ANIM_ILLUSION_OFF - waitanimation - updatenick BS_TARGET - waitstate - spriteignore0hp FALSE - printstring STRINGID_ILLUSIONWOREOFF - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_CottonDownActivates:: - copybyte sSAVED_BATTLER, gBattlerAttacker - call BattleScript_AbilityPopUpTarget - copybyte gEffectBattler, gBattlerTarget - swapattackerwithtarget - setbyte gBattlerTarget, 0 -BattleScript_CottonDownLoop: - jumpiffainted BS_TARGET, TRUE, BattleScript_CottonDownLoopIncrement - setstatchanger STAT_SPEED, 1, TRUE - jumpifbyteequal gBattlerTarget, gEffectBattler, BattleScript_CottonDownLoopIncrement - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_CottonDownTargetSpeedCantGoLower - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_CottonDownLoopIncrement -BattleScript_CottonDownTargetSpeedCantGoLower: - printstring STRINGID_STATSWONTDECREASE - waitmessage B_WAIT_TIME_LONG -BattleScript_CottonDownLoopIncrement: - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop -BattleScript_CottonDownReturn: - swapattackerwithtarget - copybyte gBattlerAttacker, sSAVED_BATTLER - return - -BattleScript_BlockedByPrimalWeatherRet:: - call BattleScript_AbilityPopUp - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedRet - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainRet - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet - return - -BattleScript_SandSpitActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_ASANDSTORMKICKEDUP - waitstate - playanimation BS_BATTLER_0, B_ANIM_SANDSTORM_CONTINUES - call BattleScript_ActivateWeatherAbilities - return - -BattleScript_PerishBodyActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNSWILLPERISHIN3TURNS - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - return - -BattleScript_GulpMissileGulping:: - call BattleScript_AbilityPopUp - playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: Animation B_ANIM_GULP_MISSILE - waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - effectivenesssound - hitanimation BS_ATTACKER - waitstate - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGulping - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER - jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGulping - jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_CLEAR_AMULET, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_CLEAR_BODY, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_FULL_METAL_BODY, BattleScript_GulpMissileNoSecondEffectGulping - jumpifability BS_ATTACKER, ABILITY_WHITE_SMOKE, BattleScript_GulpMissileNoSecondEffectGulping - jumpifflowerveilattacker BattleScript_GulpMissileNoSecondEffectGulping -BattleScript_GulpMissileNoDmgGulping: - handleformchange BS_TARGET, 0 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE - waitanimation - swapattackerwithtarget @ to make gStatDownStringIds down below print the right battler - setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_GulpMissileGorgingTargetDefenseCantGoLower - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG - swapattackerwithtarget @ restore the battlers, just in case - return -BattleScript_GulpMissileNoSecondEffectGulping: - handleformchange BS_TARGET, 0 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE - waitanimation - return -BattleScript_GulpMissileGorgingTargetDefenseCantGoLower: - printstring STRINGID_STATSWONTDECREASE - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_GulpMissileGorging:: - call BattleScript_AbilityPopUp - playanimation BS_ATTACKER, B_ANIM_MON_HIT @ TODO: Animation B_ANIM_GULP_MISSILE - waitanimation - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - effectivenesssound - hitanimation BS_ATTACKER - waitstate - jumpifability BS_ATTACKER, ABILITY_MAGIC_GUARD, BattleScript_GulpMissileNoDmgGorging - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - tryfaintmon BS_ATTACKER - jumpiffainted BS_ATTACKER, TRUE, BattleScript_GulpMissileNoSecondEffectGorging -BattleScript_GulpMissileNoDmgGorging: - handleformchange BS_TARGET, 0 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE - waitanimation - swapattackerwithtarget - seteffectprimary MOVE_EFFECT_PARALYSIS - swapattackerwithtarget - return -BattleScript_GulpMissileNoSecondEffectGorging: - handleformchange BS_TARGET, 0 - playanimation BS_TARGET, B_ANIM_FORM_CHANGE - waitanimation - return - -BattleScript_SeedSowerActivates:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_TERRAINBECOMESGRASSY - waitmessage B_WAIT_TIME_LONG - playanimation BS_SCRIPTING, B_ANIM_RESTORE_BG - call BattleScript_ActivateTerrainEffects - return - -BattleScript_AngerShellActivates:: - call BattleScript_AbilityPopUp - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed -BattleScript_AngerShellTryDef:: - setbyte sSTAT_ANIM_PLAYED, FALSE - modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON -BattleScript_AngerShellTrySpDef: - modifybattlerstatstage BS_ATTACKER, STAT_SPDEF, DECREASE, 1, BattleScript_AngerShellTryAttack, ANIM_ON -BattleScript_AngerShellTryAttack: - setbyte sSTAT_ANIM_PLAYED, FALSE - modifybattlerstatstage BS_ATTACKER, STAT_ATK, INCREASE, 1, BattleScript_AngerShellTrySpAtk, ANIM_ON -BattleScript_AngerShellTrySpAtk: - modifybattlerstatstage BS_ATTACKER, STAT_SPATK, INCREASE, 1, BattleScript_AngerShellTrySpeed, ANIM_ON -BattleScript_AngerShellTrySpeed: - modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON -BattleScript_AngerShellRet: - return - -BattleScript_WindPowerActivates:: - call BattleScript_AbilityPopUp - setcharge BS_TARGET - printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER - waitmessage B_WAIT_TIME_LONG -BattleScript_WindPowerActivates_Ret: - return - -BattleScript_ToxicDebrisActivates:: - call BattleScript_AbilityPopUp - pause B_WAIT_TIME_SHORT - settoxicspikes BattleScript_ToxicDebrisRet - printstring STRINGID_POISONSPIKESSCATTERED - waitmessage B_WAIT_TIME_LONG -BattleScript_ToxicDebrisRet: - copybyte sBATTLER, gBattlerTarget - copybyte gBattlerTarget, gBattlerAttacker - copybyte gBattlerAttacker, sBATTLER - return - -BattleScript_AttackerFormChange:: - pause 5 - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - flushtextbox -BattleScript_AttackerFormChangeNoPopup:: - handleformchange BS_ATTACKER, 0 - handleformchange BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE - waitanimation - handleformchange BS_ATTACKER, 2 - return - -BattleScript_DancerActivates:: - call BattleScript_AbilityPopUp - waitmessage B_WAIT_TIME_SHORT - setbyte sB_ANIM_TURN, 0 - setbyte sB_ANIM_TARGETS_HIT, 0 - orword gHitMarker, HITMARKER_ALLOW_NO_PP - jumptocalledmove TRUE - -BattleScript_OpportunistCopyStatChange:: - call BattleScript_AbilityPopUp - printstring STRINGID_OPPORTUNISTCOPIED - waitmessage B_WAIT_TIME_LONG - call BattleScript_TotemVar_Ret - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe - end3 - -BattleScript_BattlerGotOverItsInfatuation:: - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNGOTOVERITSINFATUATION - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_BattlerShookOffTaunt:: - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNSHOOKOFFTHETAUNT - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_BattlerFormChangeWithStringEnd3:: - pause 5 - call BattleScript_AbilityPopUp - flushtextbox - handleformchange BS_SCRIPTING, 0 - handleformchange BS_SCRIPTING, 1 - playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE, NULL - waitanimation - handleformchange BS_SCRIPTING, 2 - printstring STRINGID_PKMNTRANSFORMED - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_ProtosynthesisActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_SUNLIGHTACTIVATEDABILITY - waitmessage B_WAIT_TIME_MED - printstring STRINGID_STATWASHEIGHTENED - waitmessage B_WAIT_TIME_MED - end3 - -BattleScript_MimicryActivates_End3:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_BATTLERTYPECHANGEDTO - waitmessage B_WAIT_TIME_SHORT - end3 - -BattleScript_TraceActivatesEnd3:: - call BattleScript_TraceActivates - end3 - -BattleScript_QuarkDriveActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_ELECTRICTERRAINACTIVATEDABILITY - waitmessage B_WAIT_TIME_MED - printstring STRINGID_STATWASHEIGHTENED - waitmessage B_WAIT_TIME_MED - end3 - -BattleScript_FriskMsgWithPopup:: - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp -BattleScript_FriskMsg:: - printstring STRINGID_FRISKACTIVATES - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_BerryStatRaiseRet:: - jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryStatRaiseRet_AbilityPopup - goto BattleScript_BerryStatRaiseRet_Anim -BattleScript_BerryStatRaiseRet_AbilityPopup: - call BattleScript_AbilityPopUp -BattleScript_BerryStatRaiseRet_Anim: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseRet_End - setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM - call BattleScript_StatUp removeitem BS_SCRIPTING -BattleScript_BerryStatRaiseRet_End: return -BattleScript_ActivateTerrainEffects: - savetarget - setbyte gBattlerTarget, 0 -BattleScript_ActivateTerrainSeed: - copybyte sBATTLER, gBattlerTarget - doterrainseed BS_TARGET, BattleScript_ActivateTerrainAbility - removeitem BS_TARGET -BattleScript_ActivateTerrainAbility: - activateterrainchangeabilities BS_TARGET -BattleScript_ActivateTerrainEffects_Increment: - addbyte gBattlerTarget, 0x1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed - restoretarget - return - -BattleScript_AttackerAbilityStatRaise:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_AttackerAbilityStatRaise_End - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_ATTACKERABILITYSTATRAISE - waitmessage B_WAIT_TIME_LONG -BattleScript_AttackerAbilityStatRaise_End: - return - -BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3: - pause B_WAIT_TIME_SHORT - printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_NoReliefFromHeavyRainEnd3: - pause B_WAIT_TIME_SHORT - printstring STRINGID_NORELIEFROMHEAVYRAIN - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_MysteriousAirCurrentBlowsOnEnd3: - pause B_WAIT_TIME_SHORT - printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - waitmessage B_WAIT_TIME_LONG - end3 - -BattleScript_ActivateWeatherAbilities: - savetarget - setbyte gBattlerTarget, 0 -BattleScript_ActivateWeatherAbilities_Loop: - copybyte sBATTLER, gBattlerTarget - activateweatherchangeabilities BS_TARGET -BattleScript_ActivateWeatherAbilities_Increment: - addbyte gBattlerTarget, 1 - jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop - restoretarget - return - -BattleScript_SupersweetSyrupWontDecrease: - printstring STRINGID_STATSWONTDECREASE - goto BattleScript_SupersweetSyrupEffect_WaitString - -BattleScript_SupersweetSyrupContrary: - call BattleScript_AbilityPopUpTarget - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_SupersweetSyrupContrary_WontIncrease - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - goto BattleScript_SupersweetSyrupEffect_WaitString -BattleScript_SupersweetSyrupContrary_WontIncrease: - printstring STRINGID_TARGETSTATWONTGOHIGHER - goto BattleScript_SupersweetSyrupEffect_WaitString - -BattleScript_TryIntimidateHoldEffects: - itemstatchangeeffects BS_TARGET - jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_ADRENALINE_ORB, BattleScript_TryIntimidateHoldEffectsRet - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPEED, 12, BattleScript_TryIntimidateHoldEffectsRet - setstatchanger STAT_SPEED, 1, FALSE - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_TryIntimidateHoldEffectsRet - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - copybyte sBATTLER, gBattlerTarget - setlastuseditem BS_TARGET - printstring STRINGID_USINGITEMSTATOFPKMNROSE - waitmessage B_WAIT_TIME_LONG - removeitem BS_TARGET -BattleScript_TryIntimidateHoldEffectsRet: - return - -BattleScript_ExtremelyHarshSunlightWasNotLessenedRet: - pause B_WAIT_TIME_SHORT - printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_NoReliefFromHeavyRainRet: - pause B_WAIT_TIME_SHORT - printstring STRINGID_NORELIEFROMHEAVYRAIN - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_MysteriousAirCurrentBlowsOnRet: - pause B_WAIT_TIME_SHORT - printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_TotemVar_Ret:: - gettotemboost BattleScript_ApplyTotemVarBoost -BattleScript_TotemVarEnd: - return -BattleScript_ApplyTotemVarBoost: - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd - setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_TotemVar_Ret @loop until stats bitfield is empty - -BattleScript_TotemFlaredToLife:: - playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO Animation B_ANIM_TOTEM_FLARE, NULL - printstring STRINGID_AURAFLAREDTOLIFE - waitmessage B_WAIT_TIME_LONG - call BattleScript_ApplyTotemVarBoost - end2 - BattleScript_ItemHealHP_RemoveItemEnd2:: jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemEnd2_AbilityPopUp goto BattleScript_ItemHealHP_RemoveItemEnd2_Anim @@ -5417,21 +8825,281 @@ BattleScript_ItemHealHP_RemoveItemEnd2_Anim: removeitem BS_ATTACKER end2 -BattleScript_ItemHealHP_RemoveItemRet:: - jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp - goto BattleScript_ItemHealHP_RemoveItemRet_Anim -BattleScript_ItemHealHP_RemoveItemRet_AbilityPopUp: +BattleScript_BerryPPHealRet:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup + goto BattleScript_BerryPPHeal_Anim +BattleScript_BerryPPHeal_AbilityPopup: call BattleScript_AbilityPopUp -BattleScript_ItemHealHP_RemoveItemRet_Anim: +BattleScript_BerryPPHeal_Anim: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMRESTOREDPP + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + return + +BattleScript_BerryPPHealEnd2:: + call BattleScript_BerryPPHealRet + end2 + +BattleScript_ItemHealHP_End2:: + call BattleScript_ItemHealHP_Ret + end2 + +BattleScript_AirBaloonMsgIn:: + printstring STRINGID_AIRBALLOONFLOAT + waitmessage B_WAIT_TIME_LONG + end3 + +BattleScript_AirBaloonMsgPop:: + printstring STRINGID_AIRBALLOONPOP + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_ItemHurtRet:: + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + printstring STRINGID_HURTBYITEM + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_ATTACKER + return + +BattleScript_ItemHurtEnd2:: + playanimation BS_ATTACKER, B_ANIM_MON_HIT + waitanimation + call BattleScript_ItemHurtRet + end2 + +BattleScript_ItemHealHP_Ret:: + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMRESTOREDHPALITTLE + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_IGNORE_DISGUISE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_ATTACKER + datahpupdate BS_ATTACKER + return + +BattleScript_SelectingNotAllowedMoveChoiceItem:: + printselectionstring STRINGID_ITEMALLOWSONLYYMOVE + endselectionscript + +BattleScript_SelectingNotAllowedMoveChoiceItemInPalace:: + printstring STRINGID_ITEMALLOWSONLYYMOVE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveGorillaTactics:: + printselectionstring STRINGID_ABILITYALLOWSONLYMOVE + endselectionscript + +BattleScript_SelectingNotAllowedMoveGorillaTacticsInPalace:: + printstring STRINGID_ABILITYALLOWSONLYMOVE + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedMoveAssaultVest:: + printselectionstring STRINGID_ASSAULTVESTDOESNTALLOW + endselectionscript + +BattleScript_SelectingNotAllowedMoveAssaultVestInPalace:: + printstring STRINGID_ASSAULTVESTDOESNTALLOW + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_SelectingNotAllowedPlaceholder:: + printselectionstring STRINGID_NOTDONEYET + endselectionscript + +BattleScript_SelectingNotAllowedPlaceholderInPalace:: + printstring STRINGID_NOTDONEYET + goto BattleScript_SelectingUnusableMoveInPalace + +BattleScript_HangedOnMsg:: + playanimation BS_TARGET, B_ANIM_HANGED_ON + printstring STRINGID_PKMNHUNGONWITHX + waitmessage B_WAIT_TIME_LONG + jumpifnoholdeffect BS_TARGET, HOLD_EFFECT_FOCUS_SASH, BattleScript_HangedOnMsgRet + removeitem BS_TARGET +BattleScript_HangedOnMsgRet: + return + +BattleScript_BerryConfuseHealEnd2:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealEnd2_AbilityPopup + goto BattleScript_BerryConfuseHealEnd2_Anim +BattleScript_BerryConfuseHealEnd2_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryConfuseHealEnd2_Anim: playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT printstring STRINGID_PKMNSITEMRESTOREDHEALTH waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE healthbarupdate BS_SCRIPTING datahpupdate BS_SCRIPTING + printstring STRINGID_FORXCOMMAYZ + waitmessage B_WAIT_TIME_LONG + seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_AFFECTS_USER + removeitem BS_SCRIPTING + end2 + +BattleScript_BerryConfuseHealRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealRet_AbilityPopup + goto BattleScript_BerryConfuseHealRet_Anim +BattleScript_BerryConfuseHealRet_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryConfuseHealRet_Anim: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNSITEMRESTOREDHEALTH + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + printstring STRINGID_FORXCOMMAYZ + waitmessage B_WAIT_TIME_LONG + seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN + removeitem BS_TARGET + return + +BattleScript_BerryStatRaiseEnd2:: + jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryStatRaiseEnd2_AbilityPopup + goto BattleScript_BerryStatRaiseEnd2_Anim +BattleScript_BerryStatRaiseEnd2_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryStatRaiseEnd2_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseEnd2_End + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + call BattleScript_StatUp + removeitem BS_ATTACKER +BattleScript_BerryStatRaiseEnd2_End:: + end2 + +BattleScript_BerryStatRaiseRet:: + jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryStatRaiseRet_AbilityPopup + goto BattleScript_BerryStatRaiseRet_Anim +BattleScript_BerryStatRaiseRet_AbilityPopup: + call BattleScript_AbilityPopUp +BattleScript_BerryStatRaiseRet_Anim: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerryStatRaiseRet_End + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + call BattleScript_StatUp + removeitem BS_SCRIPTING +BattleScript_BerryStatRaiseRet_End: + return + +BattleScript_BerryFocusEnergyRet:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_PKMNUSEDXTOGETPUMPED + waitmessage B_WAIT_TIME_LONG removeitem BS_SCRIPTING return +BattleScript_BerryFocusEnergyEnd2:: + call BattleScript_BerryFocusEnergyRet + end2 + +BattleScript_ActionSelectionItemsCantBeUsed:: + printselectionstring STRINGID_ITEMSCANTBEUSEDNOW + endselectionscript + +BattleScript_FlushMessageBox:: + flushtextbox + return + +BattleScript_AskIfWantsToForfeitMatch:: + printselectionstring STRINGID_QUESTIONFORFEITMATCH + forfeityesnobox BS_ATTACKER + endselectionscript + +BattleScript_PrintPlayerForfeited:: + printstring STRINGID_FORFEITEDMATCH + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_PrintPlayerForfeitedLinkBattle:: + printstring STRINGID_FORFEITEDMATCH + waitmessage B_WAIT_TIME_LONG + endlinkbattle + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_TotemFlaredToLife:: + playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO: animation B_ANIM_TOTEM_FLARE, NULL + printstring STRINGID_AURAFLAREDTOLIFE + waitmessage B_WAIT_TIME_LONG + call BattleScript_ApplyTotemVarBoost + end2 + +@ remove the mirror herb, do totem loop +BattleScript_MirrorHerbCopyStatChangeEnd2:: + call BattleScript_MirrorHerbCopyStatChange + end2 + +BattleScript_MirrorHerbCopyStatChange:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL + printstring STRINGID_MIRRORHERBCOPIED + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + call BattleScript_TotemVar_Ret + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + return + +BattleScript_OpportunistCopyStatChange:: + call BattleScript_AbilityPopUp + printstring STRINGID_OPPORTUNISTCOPIED + waitmessage B_WAIT_TIME_LONG + call BattleScript_TotemVar_Ret + copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe + end3 + +BattleScript_TotemVar:: + call BattleScript_TotemVar_Ret + end2 + +BattleScript_TotemVar_Ret:: + gettotemboost BattleScript_ApplyTotemVarBoost +BattleScript_TotemVarEnd: + return +BattleScript_ApplyTotemVarBoost: + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TotemVarEnd + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_TotemVar_Ret @loop until stats bitfield is empty + + +BattleScript_AnnounceAirLockCloudNine:: + call BattleScript_AbilityPopUp + printstring STRINGID_AIRLOCKACTIVATES + waitmessage B_WAIT_TIME_LONG + call BattleScript_ActivateWeatherAbilities + end3 + +BattleScript_QuickClawActivation:: + flushtextbox + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_QuickDrawActivation:: + flushtextbox + call BattleScript_AbilityPopUp + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_CustapBerryActivation:: + flushtextbox + playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT + waitanimation + printstring STRINGID_CANACTFASTERTHANKSTO + waitmessage B_WAIT_TIME_LONG + removeitem BS_ATTACKER + end2 + BattleScript_MicleBerryActivateEnd2:: jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_MicleBerryActivateEnd2_Ripen goto BattleScript_MicleBerryActivateEnd2_Anim @@ -5456,111 +9124,225 @@ BattleScript_MicleBerryActivateRet_Anim: removeitem BS_SCRIPTING return -BattleScript_BerryPPHealRet:: - jumpifability BS_ATTACKER, ABILITY_RIPEN, BattleScript_BerryPPHeal_AbilityPopup - goto BattleScript_BerryPPHeal_Anim -BattleScript_BerryPPHeal_AbilityPopup: +BattleScript_JabocaRowapBerryActivates:: + jumpifability BS_TARGET, ABILITY_RIPEN, BattleScript_JabocaRowapBerryActivate_Ripen + goto BattleScript_JabocaRowapBerryActivate_Anim +BattleScript_JabocaRowapBerryActivate_Ripen: call BattleScript_AbilityPopUp -BattleScript_BerryPPHeal_Anim: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMRESTOREDPP - waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER - return - -BattleScript_BerryConfuseHealRet:: - jumpifability BS_SCRIPTING, ABILITY_RIPEN, BattleScript_BerryConfuseHealRet_AbilityPopup - goto BattleScript_BerryConfuseHealRet_Anim -BattleScript_BerryConfuseHealRet_AbilityPopup: - call BattleScript_AbilityPopUp -BattleScript_BerryConfuseHealRet_Anim: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMRESTOREDHEALTH - waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING - printstring STRINGID_FORXCOMMAYZ - waitmessage B_WAIT_TIME_LONG - seteffectprimary MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN +BattleScript_JabocaRowapBerryActivate_Anim: + jumpifabsent BS_TARGET, BattleScript_JabocaRowapBerryActivate_Dmg @ dont play the animation for a fainted target + playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT + waitanimation +BattleScript_JabocaRowapBerryActivate_Dmg: + call BattleScript_HurtAttacker removeitem BS_TARGET return -@ remove the mirror herb, do totem loop -BattleScript_MirrorHerbCopyStatChangeEnd2:: - call BattleScript_MirrorHerbCopyStatChange - end2 - -BattleScript_MirrorHerbCopyStatChange:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, NULL - printstring STRINGID_MIRRORHERBCOPIED +@ z moves / effects +BattleScript_ZMoveActivateDamaging:: + flushtextbox + trytrainerslidezmovemsg + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO: animation B_ANIM_ZMOVE_ACTIVATE, NULL + printstring STRINGID_ZMOVEUNLEASHED waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - call BattleScript_TotemVar_Ret - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe return -BattleScript_BerryCureFrbRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNSITEMHEALEDFROSTBITE - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - return - -BattleScript_MentalHerbCureRet:: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printfromtable gMentalHerbCureStringIds - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_SCRIPTING - removeitem BS_SCRIPTING - copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe - return - -BattleScript_BerryFocusEnergyRet:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_PKMNUSEDXTOGETPUMPED - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - return - -BattleScript_BerserkGeneRet:: -BattleScript_BerserkGeneRet_Anim: +BattleScript_ZMoveActivateStatus:: + flushtextbox + trytrainerslidezmovemsg savetarget - copybyte gBattlerTarget, sBATTLER - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse - setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 - setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM - call BattleScript_StatUp -BattleScript_BerserkGeneRet_TryConfuse: - jumpifability BS_SCRIPTING, ABILITY_OWN_TEMPO, BattleScript_BerserkGeneRet_OwnTempoPrevents - jumpifsafeguard BattleScript_BerserkGeneRet_SafeguardProtected - seteffectprimary MOVE_EFFECT_CONFUSION - goto BattleScript_BerserkGeneRet_End -BattleScript_BerserkGeneRet_SafeguardProtected:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_PKMNUSEDSAFEGUARD - waitmessage B_WAIT_TIME_LONG - goto BattleScript_BerserkGeneRet_End -BattleScript_BerserkGeneRet_OwnTempoPrevents: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNPREVENTSCONFUSIONWITH - waitmessage B_WAIT_TIME_LONG -BattleScript_BerserkGeneRet_End: + printstring STRINGID_ZPOWERSURROUNDS + playanimation BS_ATTACKER, B_ANIM_MON_HIT, NULL @ TODO: animation B_ANIM_ZMOVE_ACTIVATE, NULL + setzeffect restoretarget - removeitem BS_SCRIPTING - end3 + copybyte sSTATCHANGER, sSAVED_STAT_CHANGER + return -BattleScript_BerryCureFrbEnd2:: - call BattleScript_BerryCureFrzRet - end2 - -BattleScript_AirBaloonMsgIn:: - printstring STRINGID_AIRBALLOONFLOAT +BattleScript_ZEffectPrintString:: + printfromtable gZEffectStringIds waitmessage B_WAIT_TIME_LONG - end3 + return + +BattleScript_RecoverHPZMove:: + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StatUpZMove:: + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_StatUpZMoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_StatUpZMoveEnd + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_ZMOVESTATUP + waitmessage B_WAIT_TIME_LONG + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StatUpZMoveEnd: + return + +BattleScript_HealReplacementZMove:: + playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 + printfromtable gZEffectStringIds + waitmessage B_WAIT_TIME_LONG + healthbarupdate BS_SCRIPTING + datahpupdate BS_SCRIPTING + return + +BattleScript_EffectExtremeEvoboost:: + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_ExtremeEvoboostAnim + goto BattleScript_ButItFailed +BattleScript_ExtremeEvoboostAnim: + attackanimation + waitanimation +BattleScript_ExtremeEvoboostAtk:: + setbyte sSTAT_ANIM_PLAYED, FALSE + playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0 + setstatchanger STAT_ATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostDef:: + setstatchanger STAT_DEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpeed + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpeed:: + setstatchanger STAT_SPEED, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpAtk + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpAtk:: + setstatchanger STAT_SPATK, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostSpDef + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostSpDef:: + setstatchanger STAT_SPDEF, 2, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_ExtremeEvoboostEnd + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_ExtremeEvoboostEnd:: + goto BattleScript_MoveEnd + +BattleScript_EffectHitSetRemoveTerrain:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + jumpifargument ARG_TRY_REMOVE_TERRAIN_FAIL, BattleScript_RemoveTerrain + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + setremoveterrain BattleScript_TryFaint + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_TryFaint: + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_RemoveTerrain: + jumpifterrainaffected BS_TARGET, STATUS_FIELD_TERRAIN_ANY, BattleScript_RemoveTerrain_Cont + goto BattleScript_ButItFailed +BattleScript_RemoveTerrain_Cont: + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + removeterrain + playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + printfromtable gTerrainStringIds + waitmessage B_WAIT_TIME_LONG + tryfaintmon BS_TARGET + goto BattleScript_MoveEnd + +BattleScript_Pickpocket:: + call BattleScript_AbilityPopUp + jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented + swapattackerwithtarget + call BattleScript_ItemSteal + swapattackerwithtarget + activateitemeffects BS_TARGET + return + +BattleScript_PickpocketPrevented: + pause B_WAIT_TIME_SHORT + copybyte gBattlerAbility, gBattlerAttacker + call BattleScript_AbilityPopUp + printstring STRINGID_ITEMCANNOTBEREMOVED + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyBarbTransfer:: + playanimation BS_TARGET, B_ANIM_ITEM_STEAL + printstring STRINGID_STICKYBARBTRANSFER + waitmessage B_WAIT_TIME_LONG + removeitem BS_TARGET + return + +BattleScript_RedCardActivates:: + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT + printstring STRINGID_REDCARDACTIVATE + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget + jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain + jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups + jumpiftargetdynamaxed BattleScript_RedCardDynamaxed + removeitem BS_SCRIPTING + setbyte sSWITCH_CASE, B_SWITCH_RED_CARD + forcerandomswitch BattleScript_RedCardEnd + @ changes the current battle script. the rest happens in BattleScript_RoarSuccessSwitch_Ret, if switch is successful +BattleScript_RedCardEnd: + return +BattleScript_RedCardIngrain: + printstring STRINGID_PKMNANCHOREDITSELF + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return +BattleScript_RedCardSuctionCups: + printstring STRINGID_PKMNANCHORSITSELFWITH + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return +BattleScript_RedCardDynamaxed: + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + removeitem BS_SCRIPTING + swapattackerwithtarget + return BattleScript_EjectButtonActivates:: makevisible BS_ATTACKER @@ -5593,576 +9375,71 @@ BattleScript_EjectPackActivate_End2:: call BattleScript_EjectPackActivate_Ret end2 -BattleScript_ItemHurtEnd2:: - playanimation BS_ATTACKER, B_ANIM_MON_HIT - waitanimation - call BattleScript_ItemHurtRet - end2 - -BattleScript_MentalHerbCureEnd2:: - call BattleScript_MentalHerbCureRet - end2 - -BattleScript_AttackerItemStatRaise:: - copybyte sBATTLER, gBattlerAttacker - statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_AttackerItemStatRaiseRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_AttackerItemStatRaiseRet - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - waitanimation - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_USINGITEMSTATOFPKMNROSE - waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER -BattleScript_AttackerItemStatRaiseRet: - return - -BattleScript_ItemHurtRet:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_IGNORE_DISGUISE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_HURTBYITEM - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER - return - -BattleScript_AirBaloonMsgPop:: - printstring STRINGID_AIRBALLOONPOP - waitmessage B_WAIT_TIME_LONG - removeitem BS_TARGET - return - -BattleScript_RockyHelmetActivates:: - @ don't play the animation for a fainted mon - jumpifabsent BS_TARGET, BattleScript_RockyHelmetActivatesDmg - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - waitanimation -BattleScript_RockyHelmetActivatesDmg: - call BattleScript_HurtAttacker - return - -BattleScript_TargetItemStatRaise:: - copybyte sBATTLER, gBattlerTarget - statbuffchange 0, BattleScript_TargetItemStatRaiseRemoveItemRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_TargetItemStatRaiseRemoveItemRet - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - waitanimation - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_USINGITEMSTATOFPKMNROSE - waitmessage B_WAIT_TIME_LONG - removeitem BS_TARGET -BattleScript_TargetItemStatRaiseRemoveItemRet: - return - -BattleScript_JabocaRowapBerryActivates:: - jumpifability BS_TARGET, ABILITY_RIPEN, BattleScript_JabocaRowapBerryActivate_Ripen - goto BattleScript_JabocaRowapBerryActivate_Anim -BattleScript_JabocaRowapBerryActivate_Ripen: - call BattleScript_AbilityPopUp -BattleScript_JabocaRowapBerryActivate_Anim: - jumpifabsent BS_TARGET, BattleScript_JabocaRowapBerryActivate_Dmg @ dont play the animation for a fainted target - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - waitanimation -BattleScript_JabocaRowapBerryActivate_Dmg: - call BattleScript_HurtAttacker - removeitem BS_TARGET - return - -BattleScript_StickyBarbTransfer:: - playanimation BS_TARGET, B_ANIM_ITEM_STEAL - printstring STRINGID_STICKYBARBTRANSFER - waitmessage B_WAIT_TIME_LONG - removeitem BS_TARGET - return - -BattleScript_ToxicOrb:: - setbyte cMULTISTRING_CHOOSER, 0 - copybyte gEffectBattler, gBattlerAttacker - call BattleScript_MoveEffectToxic - end2 - -BattleScript_FlameOrb:: - setbyte cMULTISTRING_CHOOSER, 0 - copybyte gEffectBattler, gBattlerAttacker - call BattleScript_MoveEffectBurn - end2 - -BattleScript_WeaknessPolicy:: - copybyte sBATTLER, gBattlerTarget - jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyAtk - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_WeaknessPolicyEnd -BattleScript_WeaknessPolicyAtk: - playanimation BS_TARGET, B_ANIM_HELD_ITEM_EFFECT - waitanimation - setbyte sSTAT_ANIM_PLAYED, FALSE - playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, STAT_CHANGE_BY_TWO - setstatchanger STAT_ATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicySpAtk - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicySpAtk - printstring STRINGID_USINGITEMSTATOFPKMNROSE - waitmessage B_WAIT_TIME_LONG -BattleScript_WeaknessPolicySpAtk: - setstatchanger STAT_SPATK, 2, FALSE - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeaknessPolicyRemoveItem - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeaknessPolicyRemoveItem - printstring STRINGID_USINGITEMSTATOFPKMNROSE - waitmessage B_WAIT_TIME_LONG -BattleScript_WeaknessPolicyRemoveItem: - removeitem BS_TARGET -BattleScript_WeaknessPolicyEnd: - return - -BattleScript_HurtAttacker: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_PKMNHURTSWITH - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER - return - -BattleScript_KingsShieldEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - seteffectsecondary - copybyte sBATTLER, gBattlerTarget - copybyte gBattlerTarget, gBattlerAttacker - copybyte gBattlerAttacker, sBATTLER - orhalfword gMoveResultFlags, MOVE_RESULT_MISSED - return - -BattleScript_BanefulBunkerEffect:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_STATUS_ABILITY_EFFECT | HITMARKER_PASSIVE_DAMAGE - bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - seteffectsecondary - orhalfword gMoveResultFlags, MOVE_RESULT_MISSED - return - -BattleScript_BeakBlastBurn:: - setbyte cMULTISTRING_CHOOSER, 0 - copybyte gEffectBattler, gBattlerAttacker - call BattleScript_MoveEffectBurn - return - -BattleScript_FrostbiteHealedViaFireMove:: - printstring STRINGID_PKMNFROSTBITEHEALED - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_TARGET - return - -BattleScript_MoveEffectStockpileWoreOff:: - .if B_STOCKPILE_RAISES_DEFS >= GEN_4 - dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown - printstring STRINGID_STOCKPILEDEFFECTWOREOFF - waitmessage B_WAIT_TIME_SHORT - .endif - return - -BattleScript_StockpileStatChangeDown: - statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_StockpileStatChangeDown_Ret: - return - -BattleScript_SpikyShieldEffect:: - jumpifabsent BS_ATTACKER, BattleScript_SpikyShieldRet - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - printstring STRINGID_PKMNHURTSWITH - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_ATTACKER - orhalfword gMoveResultFlags, MOVE_RESULT_MISSED -BattleScript_SpikyShieldRet:: - return - -BattleScript_MoveEffectSmackDown:: - printstring STRINGID_FELLSTRAIGHTDOWN - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_TargetWokeUp:: - printstring STRINGID_TARGETWOKEUP - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_TARGET - return - -BattleScript_TargetBurnHeal:: - printstring STRINGID_PKMNBURNHEALED - waitmessage B_WAIT_TIME_LONG - updatestatusicon BS_TARGET - return - -BattleScript_DefDownSpeedUp:: - jumpifstat BS_ATTACKER, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_DefDownSpeedUpTryDef - jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPEED, MAX_STAT_STAGE, BattleScript_DefDownSpeedUpRet -BattleScript_DefDownSpeedUpTryDef:: - playstatchangeanimation BS_ATTACKER, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_CANT_PREVENT - setstatchanger STAT_DEF, 1, TRUE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpTrySpeed - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpTrySpeed - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_DefDownSpeedUpTrySpeed: - playstatchangeanimation BS_ATTACKER, BIT_SPEED, 0 - setstatchanger STAT_SPEED, 1, FALSE - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR | MOVE_EFFECT_CERTAIN, BattleScript_DefDownSpeedUpRet - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_DefDownSpeedUpRet - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_DefDownSpeedUpRet:: - return - -BattleScript_MagicianActivates:: - call BattleScript_AbilityPopUp - call BattleScript_ItemSteal - return - BattleScript_EjectPackActivates:: jumpifcantswitch BS_SCRIPTING, BattleScript_EjectButtonEnd goto BattleScript_EjectPackActivate_Ret -BattleScript_RedCardActivates:: - playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_REDCARDACTIVATE - waitmessage B_WAIT_TIME_LONG - swapattackerwithtarget - jumpifstatus3 BS_EFFECT_BATTLER, STATUS3_ROOTED, BattleScript_RedCardIngrain - jumpifability BS_EFFECT_BATTLER, ABILITY_SUCTION_CUPS, BattleScript_RedCardSuctionCups - @ jumpiftargetdynamaxed BattleScript_RedCardDynamaxed @ TODO: Dynamax - removeitem BS_SCRIPTING - setbyte sSWITCH_CASE, B_SWITCH_RED_CARD - forcerandomswitch BattleScript_RedCardEnd - @ changes the current battle script. the rest happens in BattleScript_RoarSuccessSwitch_Ret, if switch is successful -BattleScript_RedCardEnd: - return -BattleScript_RedCardIngrain: - printstring STRINGID_PKMNANCHOREDITSELF - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - swapattackerwithtarget - return -BattleScript_RedCardSuctionCups: - printstring STRINGID_PKMNANCHORSITSELFWITH - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - swapattackerwithtarget - return -BattleScript_RedCardDynamaxed: - printstring STRINGID_MOVEBLOCKEDBYDYNAMAX - waitmessage B_WAIT_TIME_LONG - removeitem BS_SCRIPTING - swapattackerwithtarget - return - -BattleScript_Pickpocket:: - call BattleScript_AbilityPopUp - jumpifability BS_ATTACKER, ABILITY_STICKY_HOLD, BattleScript_PickpocketPrevented - swapattackerwithtarget - call BattleScript_ItemSteal - swapattackerwithtarget - activateitemeffects BS_TARGET - return - -BattleScript_PickpocketPrevented: - pause B_WAIT_TIME_SHORT - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - printstring STRINGID_ITEMCANNOTBEREMOVED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_EmergencyExit:: - pause 5 - call BattleScript_AbilityPopUp - pause B_WAIT_TIME_LONG -BattleScript_EmergencyExitNoPopUp:: - playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN - waitanimation - openpartyscreen BS_TARGET, BattleScript_EmergencyExitRet - switchoutabilities BS_TARGET - waitstate - switchhandleorder BS_TARGET, 2 - returntoball BS_TARGET, FALSE - getswitchedmondata BS_TARGET - switchindataupdate BS_TARGET - hpthresholds BS_TARGET - printstring STRINGID_SWITCHINMON - switchinanim BS_TARGET, TRUE - waitstate - switchineffects BS_TARGET -BattleScript_EmergencyExitRet: - return - -BattleScript_EmergencyExitWild:: - pause 5 - call BattleScript_AbilityPopUp - pause B_WAIT_TIME_LONG -BattleScript_EmergencyExitWildNoPopUp:: - playanimation BS_TARGET, B_ANIM_SLIDE_OFFSCREEN - waitanimation - setoutcomeonteleport BS_TARGET - finishaction - return - -BattleScript_PrimalReversion:: - call BattleScript_PrimalReversionRet - end2 - -BattleScript_PrimalReversionRestoreAttacker:: - call BattleScript_PrimalReversionRet - copybyte gBattlerAttacker, sSAVED_BATTLER - end2 - -BattleScript_PrimalReversionRet:: - flushtextbox - setbyte gIsCriticalHit, 0 - handleprimalreversion BS_ATTACKER, 0 - handleprimalreversion BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE @ TODO: Animation B_ANIM_PRIMAL_REVERSION - waitanimation - handleprimalreversion BS_ATTACKER, 2 - printstring STRINGID_PKMNREVERTEDTOPRIMAL - waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER - return - -BattleScript_DmgHazardsOnTarget:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - call BattleScript_PrintHurtByDmgHazards - tryfaintmon BS_TARGET - tryfaintmon_spikes BS_TARGET, BattleScript_DmgHazardsOnTargetFainted - return - -BattleScript_DmgHazardsOnTargetFainted:: - setbyte sGIVEEXP_STATE, 0 - getexp BS_TARGET - moveendall - goto BattleScript_HandleFaintedMon - -BattleScript_DmgHazardsOnAttacker:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - call BattleScript_PrintHurtByDmgHazards - tryfaintmon BS_ATTACKER - tryfaintmon_spikes BS_ATTACKER, BattleScript_DmgHazardsOnAttackerFainted - return - -BattleScript_DmgHazardsOnAttackerFainted:: - setbyte sGIVEEXP_STATE, 0 - getexp BS_ATTACKER - moveendall - goto BattleScript_HandleFaintedMon - -BattleScript_HealingWishActivates:: - setbyte cMULTISTRING_CHOOSER, 0 - goto BattleScript_EffectHealingWishRestore -BattleScript_LunarDanceActivates:: - setbyte cMULTISTRING_CHOOSER, 1 - restorepp BS_ATTACKER -BattleScript_EffectHealingWishRestore: - printfromtable gHealingWishStringIds - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_WISH_HEAL - waitanimation - dmgtomaxattackerhp - manipulatedamage DMG_CHANGE_SIGN - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - clearstatus BS_ATTACKER - waitstate - updatestatusicon BS_ATTACKER - waitstate - printstring STRINGID_HEALINGWISHHEALED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_DmgHazardsOnFaintedBattler:: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_FAINTED - datahpupdate BS_FAINTED - call BattleScript_PrintHurtByDmgHazards - tryfaintmon BS_FAINTED - tryfaintmon_spikes BS_FAINTED, BattleScript_DmgHazardsOnFaintedBattlerFainted - return - -BattleScript_DmgHazardsOnFaintedBattlerFainted:: - setbyte sGIVEEXP_STATE, 0 - getexp BS_FAINTED - moveendall - goto BattleScript_HandleFaintedMon - -BattleScript_ToxicSpikesAbsorbed:: - printstring STRINGID_TOXICSPIKESABSORBED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_ToxicSpikesPoisoned:: - printstring STRINGID_TOXICSPIKESPOISONED - waitmessage B_WAIT_TIME_LONG - statusanimation BS_SCRIPTING - updatestatusicon BS_SCRIPTING - waitstate - return - -BattleScript_StickyWebOnSwitchIn:: - savetarget - copybyte gBattlerTarget, sBATTLER - setbyte sSTICKY_WEB_STAT_DROP, 1 - printstring STRINGID_STICKYWEBSWITCHIN - waitmessage B_WAIT_TIME_LONG - jumpifability BS_TARGET, ABILITY_MIRROR_ARMOR, BattleScript_MirrorArmorReflectStickyWeb - statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StickyWebOnSwitchInEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StickyWebOnSwitchInStatAnim - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StickyWebOnSwitchInEnd - pause B_WAIT_TIME_SHORT - goto BattleScript_StickyWebOnSwitchInPrintStatMsg -BattleScript_StickyWebOnSwitchInStatAnim: - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_StickyWebOnSwitchInPrintStatMsg: - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_StickyWebOnSwitchInEnd: - restoretarget - return - -BattleScript_HealReplacementZMove:: - playanimation BS_SCRIPTING B_ANIM_WISH_HEAL 0x0 - printfromtable gZEffectStringIds - waitmessage B_WAIT_TIME_LONG - healthbarupdate BS_SCRIPTING - datahpupdate BS_SCRIPTING - return - -BattleScript_PrintHurtByDmgHazards:: - printfromtable gDmgHazardsStringIds - waitmessage B_WAIT_TIME_LONG - return - -@ gBattlerTarget is battler with Mirror Armor -BattleScript_MirrorArmorReflectStickyWeb: - call BattleScript_AbilityPopUp - setattackertostickywebuser - jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss - goto BattleScript_MirrorArmorReflectStatLoss - -BattleScript_MirrorArmorReflect:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss -BattleScript_MirrorArmorReflectStatLoss: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd - jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim - goto BattleScript_MirrorArmorReflectWontFall -BattleScript_MirrorArmorReflectAnim: - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 -BattleScript_MirrorArmorReflectPrintString: - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_MirrorArmorReflectEnd: - return - -BattleScript_MirrorArmorReflectWontFall: - copybyte gBattlerTarget, gBattlerAttacker @ STRINGID_STATSWONTDECREASE uses target - goto BattleScript_MirrorArmorReflectPrintString - -BattleScript_EffectStealthRock:: - attackcanceler +BattleScript_DarkTypePreventsPrankster:: attackstring ppreduce - setstealthrock BattleScript_ButItFailed - attackanimation - waitanimation - printstring STRINGID_POINTEDSTONESFLOAT + pause B_WAIT_TIME_SHORT + printstring STRINGID_ITDOESNTAFFECT waitmessage B_WAIT_TIME_LONG + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT goto BattleScript_MoveEnd -BattleScript_AbilityHpHeal: +BattleScript_WellBakedBodyActivates:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + modifybattlerstatstage BS_TARGET, STAT_DEF, INCREASE, 1, BattleScript_WellBakedBodyEnd, ANIM_ON +BattleScript_WellBakedBodyEnd: + goto BattleScript_MoveEnd + +BattleScript_WindRiderActivatesMoveEnd:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUpTarget + orhalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT + modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_WindRiderActivatesMoveEnd_End, ANIM_ON +BattleScript_WindRiderActivatesMoveEnd_End: + goto BattleScript_MoveEnd + +BattleScript_GoodAsGoldActivates:: + attackstring + ppreduce + call BattleScript_AbilityPopUpTarget + pause B_WAIT_TIME_SHORT + printstring STRINGID_ITDOESNTAFFECT + waitmessage B_WAIT_TIME_MED + goto BattleScript_MoveEnd + +BattleScript_PastelVeilActivates:: + setbyte gBattleCommunication, 0 + setbyte gBattleCommunication + 1, 0 +BattleScript_PastelVeil_TryCurePoison: + jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_PastelVeilCurePoison + goto BattleScript_PastelVeilLoopIncrement +BattleScript_PastelVeilCurePoison: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication + 1, 0x0, BattleScript_PastelVeilCurePoisonNoPopUp call BattleScript_AbilityPopUp - printstring STRINGID_PKMNSXRESTOREDHPALITTLE2 + setbyte gBattleCommunication + 1, 1 +BattleScript_PastelVeilCurePoisonNoPopUp: @ Only show Pastel Veil pop up once if it cures two mons + printfromtable gSwitchInAbilityStringIds waitmessage B_WAIT_TIME_LONG - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - return - -BattleScript_CheekPouchActivates:: - copybyte sSAVED_BATTLER, gBattlerAttacker - copybyte gBattlerAttacker, gBattlerAbility - call BattleScript_AbilityHpHeal - copybyte gBattlerAttacker, sSAVED_BATTLER - return - -BattleScript_SideStatusWoreOffReturn:: - printstring STRINGID_PKMNSXWOREOFF - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SpikesDefog:: - printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_ToxicSpikesDefog:: - printstring STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_StickyWebDefog:: - printstring STRINGID_STICKYWEBDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_StealthRockDefog:: - printstring STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SteelsurgeDefog:: - printstring STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_RaiseStatOnFaintingTarget:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseStatOnFaintingTarget_End - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_LASTABILITYRAISEDSTAT - waitmessage B_WAIT_TIME_LONG -BattleScript_RaiseStatOnFaintingTarget_End: - return - -BattleScript_ReceiverActivates:: - call BattleScript_AbilityPopUp - printstring STRINGID_RECEIVERABILITYTAKEOVER - waitmessage B_WAIT_TIME_LONG - settracedability BS_ABILITY_BATTLER - return - -BattleScript_FellStingerRaisesStat:: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_FellStingerRaisesAtkEnd - jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, B_MSG_DEFENDER_STAT_ROSE, BattleScript_FellStingerRaisesAtkEnd - setgraphicalstatchangevalues - playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_FellStingerRaisesAtkEnd: - return + curestatus BS_TARGET + updatestatusicon BS_TARGET +BattleScript_PastelVeilLoopIncrement: + jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0x0, BattleScript_PastelVeilEnd + addbyte gBattleCommunication, 1 + jumpifnoally BS_TARGET, BattleScript_PastelVeilEnd + setallytonexttarget BattleScript_PastelVeil_TryCurePoison + goto BattleScript_PastelVeilEnd +BattleScript_PastelVeilEnd: + end3 BattleScript_NeutralizingGasExits:: savetarget @@ -6177,108 +9454,38 @@ BattleScript_NeutralizingGasExitsLoop: restoretarget return -BattleScript_BattleBondActivatesOnMoveEndAttacker:: - pause 5 - copybyte gBattlerAbility, gBattlerAttacker +BattleScript_MagicianActivates:: call BattleScript_AbilityPopUp - printstring STRINGID_ATTACKERBECAMEFULLYCHARGED - handleformchange BS_ATTACKER, 0 - handleformchange BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE - waitanimation - handleformchange BS_ATTACKER, 2 - printstring STRINGID_ATTACKERBECAMEASHSPECIES + call BattleScript_ItemSteal return -BattleScript_ScriptingAbilityStatRaise:: - copybyte gBattlerAbility, sBATTLER +BattleScript_SymbiosisActivates:: call BattleScript_AbilityPopUp - copybyte sSAVED_DMG, gBattlerAttacker - copybyte gBattlerAttacker, sBATTLER - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL + printstring STRINGID_SYMBIOSISITEMPASS + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_TargetAbilityStatRaiseRet:: + copybyte sSAVED_BATTLER, gBattlerAttacker + copybyte gBattlerAbility, gEffectBattler + copybyte gBattlerAttacker, gBattlerTarget + call BattleScript_AbilityPopUp + statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN, BattleScript_TargetAbilityStatRaiseRet_End setgraphicalstatchangevalues - playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_ATTACKERABILITYSTATRAISE - waitmessage B_WAIT_TIME_LONG - copybyte gBattlerAttacker, sSAVED_DMG + call BattleScript_StatUp +BattleScript_TargetAbilityStatRaiseRet_End: + copybyte gBattlerAttacker, sSAVED_BATTLER return -BattleScript_ElectricTerrainPrevents:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_ELECTRICTERRAINPREVENTS - waitmessage B_WAIT_TIME_LONG - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_MistyTerrainPrevents:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_MISTYTERRAINPREVENTS - waitmessage B_WAIT_TIME_LONG - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_InsomniaProtects: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_PKMNSTAYEDAWAKEUSING - waitmessage B_WAIT_TIME_LONG - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_AbilityProtectsDoesntAffectRet:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_ITDOESNTAFFECT - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_AbilityProtectsDoesntAffect: - call BattleScript_AbilityProtectsDoesntAffectRet - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_FlowerVeilProtectsRet:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_FLOWERVEILPROTECTED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_FlowerVeilProtects: - call BattleScript_FlowerVeilProtectsRet - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_SweetVeilProtectsRet:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - printstring STRINGID_FLOWERVEILPROTECTED - waitmessage B_WAIT_TIME_LONG - return - -BattleScript_SweetVeilProtects: - call BattleScript_SweetVeilProtectsRet - orhalfword gMoveResultFlags, MOVE_RESULT_FAILED - goto BattleScript_MoveEnd - -BattleScript_LeafGuardPreventsRest:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_BUTITFAILED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_EffectHit_Ret:: +@@@ MAX MOVES @@@ +BattleScript_EffectMaxMove:: attackcanceler -BattleScript_EffectHit_RetFromAccCheck:: - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON attackstring ppreduce -BattleScript_EffectHit_RetFromCritCalc:: critcalc damagecalc adjustdamage -BattleScript_Hit_RetFromAtkAnimation:: attackanimation waitanimation effectivenesssound @@ -6290,161 +9497,67 @@ BattleScript_Hit_RetFromAtkAnimation:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - setadditionaleffects - return + tryfaintmon BS_TARGET + setmaxmoveeffect + moveendall + end -BattleScript_ItemNoStatLoss:: - pause B_WAIT_TIME_SHORT - printstring STRINGID_CLEARAMULETWONTLOWERSTATS +BattleScript_EffectRaiseStatAllies:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RaiseSideStatsLoop: + jumpifabsent BS_TARGET, BattleScript_RaiseSideStatsIncrement + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_RaiseSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_RaiseSideStatsIncrement + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - return - -BattleScript_RoarSuccessSwitch:: - call BattleScript_RoarSuccessRet - getswitchedmondata BS_TARGET - switchindataupdate BS_TARGET - trytoclearprimalweather - flushtextbox - switchinanim BS_TARGET, FALSE - waitstate - printstring STRINGID_PKMNWASDRAGGEDOUT - switchineffects BS_TARGET - jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessSwitch_Ret - setbyte sSWITCH_CASE, B_SWITCH_NORMAL - goto BattleScript_MoveEnd -BattleScript_RoarSuccessSwitch_Ret: - swapattackerwithtarget @ continuation of RedCardActivates +BattleScript_RaiseSideStatsIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseSideStatsEnd + setallytonexttarget BattleScript_RaiseSideStatsLoop +BattleScript_RaiseSideStatsEnd: restoretarget - setbyte sSWITCH_CASE, B_SWITCH_NORMAL - return - -BattleScript_RoarSuccessEndBattle:: - call BattleScript_RoarSuccessRet - setbyte sSWITCH_CASE, B_SWITCH_NORMAL - setoutcomeonteleport BS_ATTACKER - finishaction - -BattleScript_RoarSuccessRet: - jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_HIT, BattleScript_RoarSuccessRet_Ret - jumpifbyte CMP_EQUAL, sSWITCH_CASE, B_SWITCH_RED_CARD, BattleScript_RoarSuccessRet_Ret - attackanimation - waitanimation -BattleScript_RoarSuccessRet_Ret: - switchoutabilities BS_TARGET - returntoball BS_TARGET, FALSE - waitstate - return - -BattleScript_NotAffectedAbilityPopUp:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUpTarget - orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE - resultmessage - waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_EffectRollout:: - attackcanceler - attackstring - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_RolloutCheckAccuracy - ppreduce -BattleScript_RolloutCheckAccuracy:: - accuracycheck BattleScript_RolloutHit, ACC_CURR_MOVE -BattleScript_RolloutHit:: - typecalc - handlerollout - goto BattleScript_HitFromCritCalc +BattleScript_EffectLowerStatFoes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_LowerSideStatsLoop: + jumpifabsent BS_TARGET, BattleScript_LowerSideStatsIncrement + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_LowerSideStatsIncrement + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerSideStatsIncrement + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_LowerSideStatsIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_LowerSideStatsEnd + setallytonexttarget BattleScript_LowerSideStatsLoop +BattleScript_LowerSideStatsEnd: + restoretarget + goto BattleScript_MoveEnd -BattleScript_CheckPrimalWeather: - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain - jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn - return - -BattleScript_MoveWeatherChangeRet:: +BattleScript_EffectSetWeather:: + playanimation 0, B_ANIM_MON_HIT @ TODO: animation B_ANIM_MAX_SET_WEATHER printfromtable gMoveWeatherChangeStringIds waitmessage B_WAIT_TIME_LONG call BattleScript_ActivateWeatherAbilities - return - -BattleScript_NoReliefFromHeavyRain: - pause B_WAIT_TIME_SHORT - printstring STRINGID_NORELIEFROMHEAVYRAIN - waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd -BattleScript_MysteriousAirCurrentBlowsOn: - pause B_WAIT_TIME_SHORT - printstring STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_ExtremelyHarshSunlightWasNotLessened: - pause B_WAIT_TIME_SHORT - printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_GrassyTerrainHeals:: - setbyte gBattleCommunication, 0 -BattleScript_GrassyTerrainLoop: - copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1 - checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement - printstring STRINGID_GRASSYTERRAINHEALS - waitmessage B_WAIT_TIME_LONG -BattleScript_GrassyTerrainHpChange: - orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER -BattleScript_GrassyTerrainLoopIncrement:: - addbyte gBattleCommunication, 1 - jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop -BattleScript_GrassyTerrainLoopEnd:: - bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd -BattleScript_GrassyTerrainHealEnd: - end2 - -BattleScript_TerrainEnds_Ret:: +BattleScript_EffectSetTerrain:: printfromtable gTerrainStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - return + call BattleScript_ActivateTerrainEffects + goto BattleScript_MoveEnd -BattleScript_TerrainEnds:: - call BattleScript_TerrainEnds_Ret - end2 - -BattleScript_LuckyChantEnds:: - printstring STRINGID_LUCKYCHANTENDS +BattleScript_DamageNonTypesStarts:: + printfromtable gDamageNonTypesStartStringIds waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_TailwindEnds:: - printstring STRINGID_TAILWINDENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_TrickRoomEnds:: - printstring STRINGID_TRICKROOMENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_WonderRoomEnds:: - printstring STRINGID_WONDERROOMENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_MagicRoomEnds:: - printstring STRINGID_MAGICROOMENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_SandStormHailSnowEnds:: - printfromtable gSandStormHailSnowEndStringIds - waitmessage B_WAIT_TIME_LONG - call BattleScript_ActivateWeatherAbilities - end2 + goto BattleScript_MoveEnd BattleScript_DamageNonTypesContinues:: setbyte gBattleCommunication, 0 @@ -6469,243 +9582,234 @@ BattleScript_DamageNonTypesContinuesEnd:: bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE end2 -BattleScript_MudSportEnds:: - printstring STRINGID_MUDSPORTENDS +BattleScript_EffectTryReducePP:: + tryspiteppreduce BattleScript_MoveEnd + printstring STRINGID_PKMNREDUCEDPP waitmessage B_WAIT_TIME_LONG - end2 + goto BattleScript_MoveEnd -BattleScript_WaterSportEnds:: - printstring STRINGID_WATERSPORTENDS +BattleScript_EffectStatus1Foes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_Status1FoesLoop: + jumpifabsent BS_TARGET, BattleScript_Status1FoesIncrement + trysetstatus1 BattleScript_Status1FoesIncrement + statusanimation BS_TARGET + updatestatusicon BS_TARGET + printfromtable gStatusConditionsStringIds waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_GravityEnds:: - printstring STRINGID_GRAVITYENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_AffectionBasedStatusHeal:: - jumpifstatus BS_ATTACKER, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AffectionBasedStatus_HealPoisonString - jumpifstatus BS_ATTACKER, STATUS1_SLEEP, BattleScript_AffectionBasedStatus_HealSleepString - jumpifstatus BS_ATTACKER, STATUS1_PARALYSIS, BattleScript_AffectionBasedStatus_HealParalysisString - jumpifstatus BS_ATTACKER, STATUS1_BURN, BattleScript_AffectionBasedStatus_HealBurnString - jumpifstatus BS_ATTACKER, STATUS1_FREEZE, BattleScript_AffectionBasedStatus_HealFreezeString - jumpifstatus BS_ATTACKER, STATUS1_FROSTBITE, BattleScript_AffectionBasedStatus_HealFrostbiteString - end2 -BattleScript_AffectionBasedStatus_HealPoisonString: - printstring STRINGID_ATTACKEREXPELLEDTHEPOISON - goto BattleScript_AffectionBasedStatusHeal_Continue -BattleScript_AffectionBasedStatus_HealSleepString: - printstring STRINGID_ATTACKERSHOOKITSELFAWAKE - goto BattleScript_AffectionBasedStatusHeal_Continue -BattleScript_AffectionBasedStatus_HealParalysisString: - printstring STRINGID_ATTACKERBROKETHROUGHPARALYSIS - goto BattleScript_AffectionBasedStatusHeal_Continue -BattleScript_AffectionBasedStatus_HealBurnString: - printstring STRINGID_ATTACKERHEALEDITSBURN - goto BattleScript_AffectionBasedStatusHeal_Continue -BattleScript_AffectionBasedStatus_HealFreezeString: - printstring STRINGID_ATTACKERMELTEDTHEICE - goto BattleScript_AffectionBasedStatusHeal_Continue -BattleScript_AffectionBasedStatus_HealFrostbiteString: - printstring STRINGID_ATTACKERMELTEDTHEICE -BattleScript_AffectionBasedStatusHeal_Continue: - waitmessage B_WAIT_TIME_LONG - clearstatus BS_ATTACKER + updatestatusicon BS_EFFECT_BATTLER waitstate - updatestatusicon BS_ATTACKER - waitstate - end2 +BattleScript_Status1FoesIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status1FoesEnd + setallytonexttarget BattleScript_Status1FoesLoop +BattleScript_Status1FoesEnd: + restoretarget + goto BattleScript_MoveEnd -BattleScript_TheRainbowDisappeared:: - printstring STRINGID_THERAINBOWDISAPPEARED +BattleScript_EffectStatus2Foes:: + savetarget + copybyte sBATTLER, gBattlerTarget +BattleScript_Status2FoesLoop: + jumpifabsent BS_TARGET, BattleScript_Status2FoesIncrement + trysetstatus2 BattleScript_Status2FoesIncrement + jumpifbyte CMP_EQUAL, gBattleCommunication, 1, BattleScript_DoConfuseAnim + jumpifbyte CMP_EQUAL, gBattleCommunication, 2, BattleScript_DoInfatuationAnim +BattleScript_Status2FoesPrintMessage: + printfromtable gStatus2StringIds waitmessage B_WAIT_TIME_LONG - end2 +BattleScript_Status2FoesIncrement: + jumpifbytenotequal gBattlerTarget, sBATTLER, BattleScript_Status2FoesEnd + setallytonexttarget BattleScript_Status2FoesLoop +BattleScript_Status2FoesEnd: + restoretarget + jumpifbyte CMP_EQUAL, gBattleCommunication + 1, 1, BattleScript_PrintCoinsScattered @ Gold Rush + goto BattleScript_MoveEnd -BattleScript_TheSeaOfFireDisappeared:: - printstring STRINGID_THESEAOFFIREDISAPPEARED - waitmessage B_WAIT_TIME_LONG - end2 +BattleScript_DoConfuseAnim: + status2animation BS_EFFECT_BATTLER, STATUS2_CONFUSION + goto BattleScript_Status2FoesPrintMessage -BattleScript_TheSwampDisappeared:: - printstring STRINGID_THESWAMPDISAPPEARED - waitmessage B_WAIT_TIME_LONG - end2 +BattleScript_DoInfatuationAnim: + status2animation BS_EFFECT_BATTLER, STATUS2_INFATUATION + goto BattleScript_Status2FoesPrintMessage -BattleScript_AquaRingHeal:: - playanimation BS_ATTACKER, B_ANIM_WISH_HEAL @ B_ANIM_AQUA_RING_HEAL @ TODO: Animation - printstring STRINGID_AQUARINGHEAL - goto BattleScript_TurnHeal - -BattleScript_PoisonHealActivates:: - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - printstring STRINGID_POISONHEALHPUP - waitmessage B_WAIT_TIME_LONG - statusanimation BS_ATTACKER - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_ATTACKER - datahpupdate BS_ATTACKER - end2 - -BattleScript_OctolockEndTurn:: - playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE - setstatchanger STAT_DEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef -BattleScript_OctolockTryLowerDef: - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_OctolockTryLowerSpDef: - setstatchanger STAT_SPDEF, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd -BattleScript_OctolockTurnDmgPrintMsg: - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_OctlockTurnDmgEnd: - end2 - -BattleScript_EmbargoEndTurn:: - printstring STRINGID_EMBARGOENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_TelekinesisEndTurn:: - printstring STRINGID_TELEKINESISENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_BufferEndTurn:: - printstring STRINGID_BUFFERENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_FrostbiteTurnDmg:: - printstring STRINGID_PKMNHURTBYFROSTBITE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_DoStatusTurnDmg - -BattleScript_TerrainPreventsEnd2:: - pause B_WAIT_TIME_SHORT - printfromtable gTerrainPreventsStringIds - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_ThroatChopEndTurn:: - printstring STRINGID_THROATCHOPENDS - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_SlowStartEnds:: - pause 5 - copybyte gBattlerAbility, gBattlerAttacker - call BattleScript_AbilityPopUp - printstring STRINGID_SLOWSTARTEND - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_SaltCureExtraDamage:: - playanimation BS_TARGET, B_ANIM_MON_HIT, NULL @ B_ANIM_SALT_CURE_DAMAGE, NULL @ TODO: animation - waitanimation - call BattleScript_HurtTarget_NoString - printstring STRINGID_TARGETISHURTBYSALTCURE - waitmessage B_WAIT_TIME_LONG - end2 - -BattleScript_SyrupBombEndTurn:: - flushtextbox - playanimation BS_ATTACKER, B_ANIM_MON_HIT @ B_ANIM_SYRUP_BOMB_SPEED_DROP @ TODO: animation - setstatchanger STAT_SPEED, 1, TRUE - statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_SyrupBombTurnDmgEnd - printfromtable gStatDownStringIds - waitmessage B_WAIT_TIME_LONG -BattleScript_SyrupBombTurnDmgEnd: - end2 +BattleScript_PrintCoinsScattered: + printstring STRINGID_COINSSCATTERED + goto BattleScript_MoveEnd BattleScript_TormentEnds:: printstring STRINGID_TORMENTEDNOMORE waitmessage B_WAIT_TIME_LONG end2 -BattleScript_HurtByTheSeaOfFire:: - printstring STRINGID_HURTBYTHESEAOFFIRE - waitmessage B_WAIT_TIME_LONG - goto BattleScript_DoTurnDmg - -BattleScript_HurtTarget_NoString: - orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - tryfaintmon BS_TARGET - return - -BattleScript_AbilityRaisesDefenderStat:: - pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp - statbuffchange 0, NULL +BattleScript_EffectRaiseCritAlliesAnim:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RaiseCritAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_RaiseCritAlliesIncrement + setstatchanger STAT_ATK, 0, FALSE @ for animation setgraphicalstatchangevalues - playanimation BS_ABILITY_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - printstring STRINGID_DEFENDERSSTATROSE + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printstring STRINGID_PKMNGETTINGPUMPED waitmessage B_WAIT_TIME_LONG - return - -BattleScript_EffectTwoTurnsAttack:: - jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_TwoTurnMovesSecondTurn - jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING, BattleScript_TwoTurnMovesSecondTurn - tryfiretwoturnmovewithoutcharging BS_ATTACKER, BattleScript_EffectHit @ e.g. Solar Beam - call BattleScript_FirstChargingTurn - tryfiretwoturnmoveaftercharging BS_ATTACKER, BattleScript_TwoTurnMovesSecondTurn @ e.g. Electro Shot - jumpifholdeffect BS_ATTACKER, HOLD_EFFECT_POWER_HERB, BattleScript_TwoTurnMovesSecondPowerHerbActivates +BattleScript_RaiseCritAlliesIncrement: + setbyte sSTAT_ANIM_PLAYED, FALSE + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RaiseCritAlliesEnd + setallytonexttarget BattleScript_RaiseCritAlliesLoop +BattleScript_RaiseCritAlliesEnd: + restoretarget goto BattleScript_MoveEnd -BattleScript_TwoTurnMovesSecondPowerHerbActivates: - call BattleScript_PowerHerbActivation - trygulpmissile @ Edge case for Cramorant ability Gulp Missile -BattleScript_FromTwoTurnMovesSecondTurnRet: - call BattleScript_TwoTurnMovesSecondTurnRet - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE -@ before Gen 5, charge moves did not print an attack string on the charge turn -.if B_UPDATED_MOVE_DATA < GEN_5 - attackstring -.endif - goto BattleScript_HitFromCritCalc +BattleScript_EffectHealOneSixthAllies:: + jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_HealOneSixthAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_HealOneSixthAlliesIncrement + tryhealsixthhealth BattleScript_HealOneSixthAlliesIncrement + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + printstring STRINGID_PKMNREGAINEDHEALTH + waitmessage B_WAIT_TIME_LONG +BattleScript_HealOneSixthAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_HealOneSixthAlliesEnd + setallytonexttarget BattleScript_HealOneSixthAlliesLoop +BattleScript_HealOneSixthAlliesEnd: + restoretarget + goto BattleScript_MoveEnd -BattleScript_TwoTurnMovesSecondTurn:: - attackcanceler - call BattleScript_TwoTurnMovesSecondTurnRet - orword gHitMarker, HITMARKER_NO_PPDEDUCT - goto BattleScript_HitFromAccCheck +BattleScript_EffectCureStatusAllies:: + jumpifteamhealthy BS_ATTACKER, BattleScript_MoveEnd + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_CureStatusAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_CureStatusAlliesIncrement + jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_CureStatusActivate +BattleScript_CureStatusAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_CureStatusAlliesEnd + setallytonexttarget BattleScript_CureStatusAlliesLoop +BattleScript_CureStatusAlliesEnd: + restoretarget + goto BattleScript_MoveEnd -BattleScript_TwoTurnMovesSecondTurnRet: - setbyte sB_ANIM_TURN, 1 - clearstatusfromeffect BS_ATTACKER, MOVE_EFFECT_CHARGING - clearsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP - return +BattleScript_CureStatusActivate: + curestatus BS_TARGET + updatestatusicon BS_TARGET + swapattackerwithtarget + printstring STRINGID_PKMNSTATUSNORMAL + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget + goto BattleScript_CureStatusAlliesIncrement -BattleScript_GulpMissileFormChange:: - call BattleScript_AttackerFormChange - goto BattleScript_FromTwoTurnMovesSecondTurnRet +BattleScript_EffectRecycleBerriesAllies:: + savetarget + copybyte gBattlerTarget, gBattlerAttacker +BattleScript_RecycleBerriesAlliesLoop: + jumpifabsent BS_TARGET, BattleScript_RecycleBerriesAlliesIncrement + tryrecycleberry BattleScript_RecycleBerriesAlliesIncrement + swapattackerwithtarget + printstring STRINGID_XFOUNDONEY + waitmessage B_WAIT_TIME_LONG + swapattackerwithtarget +BattleScript_RecycleBerriesAlliesIncrement: + jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_RecycleBerriesAlliesEnd + setallytonexttarget BattleScript_RecycleBerriesAlliesLoop +BattleScript_RecycleBerriesAlliesEnd: + restoretarget + goto BattleScript_MoveEnd -BattleScript_FirstChargingTurn:: - attackcanceler -@ before Gen 5, charge moves did not print an attack string on the charge turn -.if B_UPDATED_MOVE_DATA >= GEN_5 +BattleScript_EffectStonesurge:: + setstealthrock BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_EffectSteelsurge:: + setsteelsurge BattleScript_MoveEnd + printfromtable gDmgHazardsStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +@@@ END MAX MOVES @@@ + +BattleScript_DynamaxBegins:: flushtextbox + trytrainerslidedynamaxmsg + returnatktoball + pause B_WAIT_TIME_SHORT + returntoball BS_SCRIPTING, TRUE + switchinanim BS_SCRIPTING, TRUE + updatedynamax + playanimation BS_SCRIPTING, B_ANIM_MON_HIT @ TODO: animation B_ANIM_DYNAMAX_GROWTH + waitanimation + end3 + +BattleScript_DynamaxEnds:: + flushtextbox + updatedynamax + playanimation BS_SCRIPTING, B_ANIM_FORM_CHANGE + waitanimation + end2 + +BattleScript_MoveBlockedByDynamax:: + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring - waitmessage B_WAIT_TIME_LONG -.endif + pause B_WAIT_TIME_SHORT ppreduce -BattleScript_FirstChargingTurnAfterAttackString: - setsemiinvulnerablebit @ only for moves with EFFECT_SEMI_INVULNERABLE/EFFECT_SKY_DROP - orword gHitMarker, HITMARKER_CHARGING - seteffectprimary MOVE_EFFECT_CHARGING | MOVE_EFFECT_AFFECTS_USER - twoturnmoveschargestringandanimation - setadditionaleffects @ only onChargeTurnOnly effects will work here - return - -BattleScript_PowerHerbActivation: - playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT - printstring STRINGID_POWERHERB + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_STRING_PRINTED, BattleScript_MoveEnd + printstring STRINGID_MOVEBLOCKEDBYDYNAMAX + waitmessage B_WAIT_TIME_LONG + orword gHitMarker, HITMARKER_STRING_PRINTED + goto BattleScript_MoveEnd + +BattleScript_PokemonCantUseTheMove:: + attackstring + ppreduce + pause B_WAIT_TIME_SHORT + printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_CouldntFullyProtect:: + printstring STRINGID_COULDNTFULLYPROTECT waitmessage B_WAIT_TIME_LONG - removeitem BS_ATTACKER return +BattleScript_BerserkGeneRet:: +BattleScript_BerserkGeneRet_Anim: + savetarget + copybyte gBattlerTarget, sBATTLER + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse + setgraphicalstatchangevalues + playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1 + setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_ITEM + call BattleScript_StatUp +BattleScript_BerserkGeneRet_TryConfuse: + jumpifability BS_SCRIPTING, ABILITY_OWN_TEMPO, BattleScript_BerserkGeneRet_OwnTempoPrevents + jumpifsafeguard BattleScript_BerserkGeneRet_SafeguardProtected + seteffectprimary MOVE_EFFECT_CONFUSION + goto BattleScript_BerserkGeneRet_End +BattleScript_BerserkGeneRet_SafeguardProtected:: + pause B_WAIT_TIME_SHORT + printstring STRINGID_PKMNUSEDSAFEGUARD + waitmessage B_WAIT_TIME_LONG + goto BattleScript_BerserkGeneRet_End +BattleScript_BerserkGeneRet_OwnTempoPrevents: + pause B_WAIT_TIME_SHORT + call BattleScript_AbilityPopUp + printstring STRINGID_PKMNPREVENTSCONFUSIONWITH + waitmessage B_WAIT_TIME_LONG +BattleScript_BerserkGeneRet_End: + restoretarget + removeitem BS_SCRIPTING + end3 + +BattleScript_EffectSnow:: + attackcanceler + attackstring + ppreduce + call BattleScript_CheckPrimalWeather + setsnow + goto BattleScript_MoveWeatherChange diff --git a/include/battle.h b/include/battle.h index 55a1347a6..ce73c1168 100644 --- a/include/battle.h +++ b/include/battle.h @@ -746,6 +746,8 @@ extern struct BattleStruct *gBattleStruct; #define IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0) == type || GetBattlerType(battlerId, 1) == type || (GetBattlerType(battlerId, 2) != TYPE_MYSTERY && GetBattlerType(battlerId, 2) == type))) +#define IS_BATTLER_TYPELESS(battlerId)(GetBattlerType(battlerId, 0) == TYPE_MYSTERY && GetBattlerType(battlerId, 1) == TYPE_MYSTERY && GetBattlerType(battlerId, 2) == TYPE_MYSTERY) + #define SET_BATTLER_TYPE(battlerId, type) \ { \ gBattleMons[battlerId].type1 = type; \ diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 47a7b964e..68cdab7b1 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -18,7 +18,6 @@ extern const u8 BattleScript_MoveUsedMustRecharge[]; extern const u8 BattleScript_FaintAttacker[]; extern const u8 BattleScript_FaintTarget[]; extern const u8 BattleScript_GiveExp[]; -extern const u8 BattleScript_LocalTrainerBattleWon[]; extern const u8 BattleScript_LocalTwoTrainersDefeated[]; extern const u8 BattleScript_LocalBattleWonLoseTexts[]; extern const u8 BattleScript_LocalBattleWonReward[]; @@ -27,7 +26,6 @@ extern const u8 BattleScript_LocalBattleLost[]; extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[]; extern const u8 BattleScript_LocalBattleLostEnd[]; extern const u8 BattleScript_CheckDomeDrew[]; -extern const u8 BattleScript_LinkBattleWonOrLost[]; extern const u8 BattleScript_BattleTowerTrainerBattleWon[]; extern const u8 BattleScript_SmokeBallEscape[]; extern const u8 BattleScript_RanAwayUsingMonAbility[]; @@ -52,7 +50,6 @@ extern const u8 BattleScript_LeechSeedTurnDrain[]; extern const u8 BattleScript_BideStoringEnergy[]; extern const u8 BattleScript_BideAttack[]; extern const u8 BattleScript_BideNoEnergyToAttack[]; -extern const u8 BattleScript_SuccessForceOut[]; extern const u8 BattleScript_MistProtected[]; extern const u8 BattleScript_RageIsBuilding[]; extern const u8 BattleScript_MoveUsedIsDisabled[]; @@ -147,7 +144,6 @@ extern const u8 BattleScript_MoveHPDrain[]; extern const u8 BattleScript_MonMadeMoveUseless_PPLoss[]; extern const u8 BattleScript_MonMadeMoveUseless[]; extern const u8 BattleScript_FlashFireBoost_PPLoss[]; -extern const u8 BattleScript_FlashFireBoost[]; extern const u8 BattleScript_AbilityNoStatLoss[]; extern const u8 BattleScript_BRNPrevention[]; extern const u8 BattleScript_PRLZPrevention[]; @@ -161,7 +157,6 @@ extern const u8 BattleScript_StickyHoldActivates[]; extern const u8 BattleScript_ColorChangeActivates[]; extern const u8 BattleScript_RoughSkinActivates[]; extern const u8 BattleScript_CuteCharmActivates[]; -extern const u8 BattleScript_ApplySecondaryEffect[]; extern const u8 BattleScript_SynchronizeActivates[]; extern const u8 BattleScript_NoItemSteal[]; extern const u8 BattleScript_AbilityCuredStatus[]; @@ -185,12 +180,10 @@ extern const u8 BattleScript_BerryCureChosenStatusEnd2[]; extern const u8 BattleScript_BerryCureChosenStatusRet[]; extern const u8 BattleScript_WhiteHerbEnd2[]; extern const u8 BattleScript_WhiteHerbRet[]; -extern const u8 BattleScript_ItemHealHP_RemoveItem[]; extern const u8 BattleScript_BerryPPHealEnd2[]; extern const u8 BattleScript_ItemHealHP_End2[]; extern const u8 BattleScript_ItemHealHP_Ret[]; extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[]; -extern const u8 BattleScript_FocusBandActivates[]; extern const u8 BattleScript_BerryConfuseHealEnd2[]; extern const u8 BattleScript_BerryStatRaiseEnd2[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; @@ -219,7 +212,6 @@ extern const u8 BattleScript_FlushMessageBox[]; extern const u8 BattleScript_GhostBallDodge[]; extern const u8 BattleScript_OldMan_Pokedude_CaughtMessage[]; extern const u8 BattleScript_SilphScopeUnveiled[]; -extern const u8 BattleScript_BattleTowerTrainerBattleWon[]; extern const u8 *const gBattlescriptsForBallThrow[]; extern const u8 *const gBattlescriptsForRunningByItem[]; @@ -231,18 +223,11 @@ extern const u8 BattleScript_ItemRestoreHP_Party[]; // effect scripts extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectSleep[]; -extern const u8 BattleScript_EffectPoisonHit[]; extern const u8 BattleScript_EffectAbsorb[]; -extern const u8 BattleScript_EffectBurnHit[]; -extern const u8 BattleScript_EffectFreezeHit[]; -extern const u8 BattleScript_EffectParalyzeHit[]; extern const u8 BattleScript_EffectExplosion[]; extern const u8 BattleScript_EffectDreamEater[]; extern const u8 BattleScript_EffectMirrorMove[]; -extern const u8 BattleScript_EffectAttackUp[]; -extern const u8 BattleScript_EffectDefenseUp[]; extern const u8 BattleScript_EffectHit[]; -extern const u8 BattleScript_EffectSpecialAttackUp[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectEvasionUp[]; @@ -259,27 +244,17 @@ extern const u8 BattleScript_EffectBide[]; extern const u8 BattleScript_EffectRoar[]; extern const u8 BattleScript_EffectMultiHit[]; extern const u8 BattleScript_EffectConversion[]; -extern const u8 BattleScript_EffectFlinchHit[]; extern const u8 BattleScript_EffectRestoreHp[]; extern const u8 BattleScript_EffectToxic[]; -extern const u8 BattleScript_EffectPayDay[]; extern const u8 BattleScript_EffectLightScreen[]; -extern const u8 BattleScript_EffectTriAttack[]; extern const u8 BattleScript_EffectRest[]; extern const u8 BattleScript_EffectOHKO[]; extern const u8 BattleScript_EffectSuperFang[]; -extern const u8 BattleScript_EffectDragonRage[]; -extern const u8 BattleScript_EffectTrap[]; extern const u8 BattleScript_EffectHit[]; -extern const u8 BattleScript_EffectDoubleHit[]; extern const u8 BattleScript_EffectMist[]; extern const u8 BattleScript_EffectFocusEnergy[]; extern const u8 BattleScript_EffectConfuse[]; -extern const u8 BattleScript_EffectAttackUp[]; -extern const u8 BattleScript_EffectDefenseUp[]; extern const u8 BattleScript_EffectSpeedUp[]; -extern const u8 BattleScript_EffectSpecialAttackUp[]; -extern const u8 BattleScript_EffectSpecialDefenseUp[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectTransform[]; @@ -293,18 +268,9 @@ extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectReflect[]; extern const u8 BattleScript_EffectPoison[]; extern const u8 BattleScript_EffectParalyze[]; -extern const u8 BattleScript_EffectAttackDownHit[]; -extern const u8 BattleScript_EffectDefenseDownHit[]; -extern const u8 BattleScript_EffectSpeedDownHit[]; -extern const u8 BattleScript_EffectSpecialAttackDownHit[]; -extern const u8 BattleScript_EffectSpecialDefenseDownHit[]; -extern const u8 BattleScript_EffectAccuracyDownHit[]; extern const u8 BattleScript_EffectHit[]; -extern const u8 BattleScript_EffectConfuseHit[]; -extern const u8 BattleScript_EffectTwineedle[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectSubstitute[]; -extern const u8 BattleScript_EffectRecharge[]; extern const u8 BattleScript_EffectRage[]; extern const u8 BattleScript_EffectMimic[]; extern const u8 BattleScript_EffectMetronome[]; @@ -327,7 +293,6 @@ extern const u8 BattleScript_EffectSpite[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectHealBell[]; extern const u8 BattleScript_EffectHit[]; -extern const u8 BattleScript_EffectThief[]; extern const u8 BattleScript_EffectMeanLook[]; extern const u8 BattleScript_EffectNightmare[]; extern const u8 BattleScript_EffectMinimize[]; @@ -346,36 +311,24 @@ extern const u8 BattleScript_EffectReturn[]; extern const u8 BattleScript_EffectPresent[]; extern const u8 BattleScript_EffectFrustration[]; extern const u8 BattleScript_EffectSafeguard[]; -extern const u8 BattleScript_EffectThawHit[]; extern const u8 BattleScript_EffectMagnitude[]; extern const u8 BattleScript_EffectBatonPass[]; extern const u8 BattleScript_EffectHit[]; -extern const u8 BattleScript_EffectRapidSpin[]; -extern const u8 BattleScript_EffectSonicboom[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectMorningSun[]; extern const u8 BattleScript_EffectSynthesis[]; extern const u8 BattleScript_EffectMoonlight[]; extern const u8 BattleScript_EffectRainDance[]; extern const u8 BattleScript_EffectSunnyDay[]; -extern const u8 BattleScript_EffectDefenseUpHit[]; -extern const u8 BattleScript_EffectAttackUpHit[]; -extern const u8 BattleScript_EffectAllStatsUpHit[]; extern const u8 BattleScript_EffectHit[]; extern const u8 BattleScript_EffectBellyDrum[]; extern const u8 BattleScript_EffectPsychUp[]; extern const u8 BattleScript_EffectMirrorCoat[]; -extern const u8 BattleScript_EffectTwister[]; -extern const u8 BattleScript_EffectEarthquake[]; extern const u8 BattleScript_EffectFutureSight[]; -extern const u8 BattleScript_EffectGust[]; -extern const u8 BattleScript_EffectStomp[]; -extern const u8 BattleScript_EffectThunder[]; extern const u8 BattleScript_EffectTeleport[]; extern const u8 BattleScript_EffectBeatUp[]; extern const u8 BattleScript_EffectDefenseCurl[]; extern const u8 BattleScript_EffectSoftboiled[]; -extern const u8 BattleScript_EffectFakeOut[]; extern const u8 BattleScript_EffectUproar[]; extern const u8 BattleScript_EffectStockpile[]; extern const u8 BattleScript_EffectSwallow[]; @@ -385,9 +338,7 @@ extern const u8 BattleScript_EffectTorment[]; extern const u8 BattleScript_EffectFlatter[]; extern const u8 BattleScript_EffectWillOWisp[]; extern const u8 BattleScript_EffectMemento[]; -extern const u8 BattleScript_EffectFacade[]; extern const u8 BattleScript_EffectFocusPunch[]; -extern const u8 BattleScript_EffectSmellingsalt[]; extern const u8 BattleScript_EffectFollowMe[]; extern const u8 BattleScript_EffectNaturePower[]; extern const u8 BattleScript_EffectCharge[]; @@ -398,30 +349,20 @@ extern const u8 BattleScript_EffectRolePlay[]; extern const u8 BattleScript_EffectWish[]; extern const u8 BattleScript_EffectAssist[]; extern const u8 BattleScript_EffectIngrain[]; -extern const u8 BattleScript_EffectSuperpower[]; extern const u8 BattleScript_EffectMagicCoat[]; extern const u8 BattleScript_EffectRecycle[]; -extern const u8 BattleScript_EffectRevenge[]; extern const u8 BattleScript_EffectBrickBreak[]; extern const u8 BattleScript_EffectYawn[]; -extern const u8 BattleScript_EffectKnockOff[]; extern const u8 BattleScript_EffectEndeavor[]; extern const u8 BattleScript_EffectSkillSwap[]; extern const u8 BattleScript_EffectImprison[]; extern const u8 BattleScript_EffectRefresh[]; extern const u8 BattleScript_EffectGrudge[]; extern const u8 BattleScript_EffectSnatch[]; -extern const u8 BattleScript_EffectDoubleEdge[]; -extern const u8 BattleScript_EffectTeeterDance[]; -extern const u8 BattleScript_EffectBurnHit[]; extern const u8 BattleScript_EffectMudSport[]; -extern const u8 BattleScript_EffectPoisonFang[]; -extern const u8 BattleScript_EffectOverheat[]; extern const u8 BattleScript_EffectTickle[]; extern const u8 BattleScript_EffectCosmicPower[]; -extern const u8 BattleScript_EffectSkyUppercut[]; extern const u8 BattleScript_EffectBulkUp[]; -extern const u8 BattleScript_EffectPoisonHit[]; extern const u8 BattleScript_EffectWaterSport[]; extern const u8 BattleScript_EffectCalmMind[]; extern const u8 BattleScript_EffectDragonDance[]; @@ -469,7 +410,6 @@ extern const u8 BattleScript_StealthRockActivates[]; extern const u8 BattleScript_SpikesActivates[]; extern const u8 BattleScript_SyrupBombActivates[]; extern const u8 BattleScript_AromaVeilProtectsRet[]; -extern const u8 BattleScript_EffectPsychicNoise[]; extern const u8 BattleScript_StatUpMsg[]; extern const u8 BattleScript_SymbiosisActivates[]; extern const u8 BattleScript_OverworldStatusStarts[]; @@ -557,7 +497,6 @@ extern const u8 BattleScript_LocalTwoTrainersDefeated[]; extern const u8 BattleScript_LocalBattleWonLoseTexts[]; extern const u8 BattleScript_LocalBattleWonReward[]; extern const u8 BattleScript_PayDayMoneyAndPickUpItems[]; -extern const u8 BattleScript_LocalBattleLost[]; extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[]; extern const u8 BattleScript_LocalBattleLostEnd[]; extern const u8 BattleScript_CheckDomeDrew[]; @@ -568,7 +507,6 @@ extern const u8 BattleScript_SmokeBallEscape[]; extern const u8 BattleScript_RanAwayUsingMonAbility[]; extern const u8 BattleScript_GotAwaySafely[]; extern const u8 BattleScript_WildMonFled[]; -extern const u8 BattleScript_PrintCantRunFromTrainer[]; extern const u8 BattleScript_PrintFailedToRunString[]; extern const u8 BattleScript_PrintCantEscapeFromBattle[]; extern const u8 BattleScript_PrintFullBox[]; @@ -752,7 +690,6 @@ extern const u8 BattleScript_BerryStatRaiseRet[]; extern const u8 BattleScript_BerryFocusEnergyRet[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; -extern const u8 BattleScript_ArenaTurnBeginning[]; extern const u8 BattleScript_PalacePrintFlavorText[]; extern const u8 BattleScript_ArenaDoJudgment[]; extern const u8 BattleScript_FrontierLinkBattleLost[]; @@ -1058,7 +995,6 @@ extern const u8 BattleScript_EffectSleep[]; extern const u8 BattleScript_EffectAbsorb[]; extern const u8 BattleScript_EffectExplosion[]; extern const u8 BattleScript_EffectDreamEater[]; -extern const u8 BattleScript_EffectMirrorMove[]; extern const u8 BattleScript_EffectAttackUp[]; extern const u8 BattleScript_EffectDefenseUp[]; extern const u8 BattleScript_EffectSpeedUp[]; @@ -1159,7 +1095,6 @@ extern const u8 BattleScript_EffectBellyDrum[]; extern const u8 BattleScript_EffectPsychUp[]; extern const u8 BattleScript_EffectMirrorCoat[]; extern const u8 BattleScript_EffectFutureSight[]; -extern const u8 BattleScript_EffectGust[]; extern const u8 BattleScript_EffectTeleport[]; extern const u8 BattleScript_EffectBeatUp[]; extern const u8 BattleScript_EffectDefenseCurl[]; @@ -1197,7 +1132,6 @@ extern const u8 BattleScript_EffectHitEscape[]; extern const u8 BattleScript_EffectMudSport[]; extern const u8 BattleScript_EffectTickle[]; extern const u8 BattleScript_EffectCosmicPower[]; -extern const u8 BattleScript_EffectSkyUppercut[]; extern const u8 BattleScript_EffectBulkUp[]; extern const u8 BattleScript_EffectPlaceholder[]; extern const u8 BattleScript_EffectWaterSport[]; diff --git a/include/battle_util.h b/include/battle_util.h index f2e6d4402..a237efb80 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -167,6 +167,7 @@ bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind); u32 CalcSecondaryEffectChance(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect); bool32 MoveHasAdditionalEffect(u32 move, u32 moveEffect); u8 GetBattleMoveCategory(u32 moveId); +bool32 CanFling(u32 battler); u32 GetBattlerMoveTargetType(u32 battler, u32 move); bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag); bool32 IsBattlerGrounded(u32 battler); @@ -239,6 +240,7 @@ s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 ma bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 MoveHasChargeTurnAdditionalEffect(u32 move); bool32 IsPartnerMonFromSameTrainer(u32 battler); +u8 GetCategoryBasedOnStats(u32 battler); // battle_ai_util.h bool32 IsHealingMove(u32 move); diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index c393bac5c..1d8407719 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -1232,7 +1232,7 @@ #define STRINGID_SUNLIGHTACTIVATEDABILITY 633 #define STRINGID_STATWASHEIGHTENED 634 #define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 635 -#define STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT 636 +#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 636 #define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 637 #define STRINGID_PKMNSABILITYPREVENTSABILITY 638 #define STRINGID_PREPARESHELLTRAP 639 @@ -1392,6 +1392,7 @@ #define B_MSG_STARTED_SANDSTORM 3 #define B_MSG_STARTED_SUNLIGHT 4 #define B_MSG_STARTED_HAIL 5 +#define B_MSG_STARTED_SNOW 6 // gRainContinuesStringIds #define B_MSG_RAIN_CONTINUES 0 diff --git a/src/battle_message.c b/src/battle_message.c index 721168578..ea7539043 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -329,7 +329,7 @@ static const u8 sText_WildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} f static const u8 sText_TwoWildFled[] = _("{PLAY_SE SE_FLEE}{B_LINK_OPPONENT1_NAME} and\n{B_LINK_OPPONENT2_NAME} fled!"); static const u8 sText_NoRunningFromTrainers[] = _("No! There's no running\nfrom a TRAINER battle!\p"); static const u8 sText_CantEscape[] = _("Can't escape!\p"); -static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don't leave me like this!\p"); +static const u8 sText_DontLeaveBirch[] = _(""); // Dummied static const u8 sText_ButNothingHappened[] = _("But nothing happened!"); static const u8 sText_ButItFailed[] = _("But it failed!"); static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!"); @@ -1044,7 +1044,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_ST [STRINGID_SHARPSTEELDMG - BATTLESTRINGS_TABLE_START] = sText_SharpSteelDmg, [STRINGID_SHARPSTEELFLOATS - BATTLESTRINGS_TABLE_START] = sText_SharpSteelFloats, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, - [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, + [STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, [STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility, [STRINGID_STATWASHEIGHTENED - BATTLESTRINGS_TABLE_START] = sText_StatWasHeightened, [STRINGID_SUNLIGHTACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_SunlightActivatedAbility, @@ -1844,11 +1844,12 @@ const u16 gNoEscapeStringIds[] = const u16 gMoveWeatherChangeStringIds[] = { [B_MSG_STARTED_RAIN] = STRINGID_STARTEDTORAIN, - [B_MSG_STARTED_DOWNPOUR] = STRINGID_DOWNPOURSTARTED, + [B_MSG_STARTED_DOWNPOUR] = STRINGID_DOWNPOURSTARTED, // Unused [B_MSG_WEATHER_FAILED] = STRINGID_BUTITFAILED, [B_MSG_STARTED_SANDSTORM] = STRINGID_SANDSTORMBREWED, [B_MSG_STARTED_SUNLIGHT] = STRINGID_SUNLIGHTGOTBRIGHT, - [B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL + [B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL, + [B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW, }; const u16 gSandStormHailSnowContinuesStringIds[] = @@ -2206,6 +2207,24 @@ const u16 gCaughtMonStringIds[] = [B_MSG_BILLS_BOX_FULL] = STRINGID_PKMNBOXBILLSPCFULL }; +const u16 gRoomsStringIds[] = +{ + STRINGID_PKMNTWISTEDDIMENSIONS, STRINGID_TRICKROOMENDS, + STRINGID_SWAPSDEFANDSPDEFOFALLPOKEMON, STRINGID_WONDERROOMENDS, + STRINGID_HELDITEMSLOSEEFFECTS, STRINGID_MAGICROOMENDS, + STRINGID_EMPTYSTRING3 +}; + +const u16 gStatusConditionsStringIds[] = +{ + STRINGID_PKMNWASPOISONED, STRINGID_PKMNBADLYPOISONED, STRINGID_PKMNWASBURNED, STRINGID_PKMNWASPARALYZED, STRINGID_PKMNFELLASLEEP, STRINGID_PKMNGOTFROSTBITE +}; + +const u16 gStatus2StringIds[] = +{ + STRINGID_PKMNWASCONFUSED, STRINGID_PKMNFELLINLOVE, STRINGID_TARGETCANTESCAPENOW, STRINGID_PKMNSUBJECTEDTOTORMENT +}; + const u16 gDamageNonTypesStartStringIds[] = { [B_MSG_TRAPPED_WITH_VINES] = STRINGID_TEAMTRAPPEDWITHVINES, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d33c6fb32..eab4bcfc4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -15893,205 +15893,91 @@ static void Cmd_callnative(void) func(); } -void BS_GetBattlerSide(void) +// Callnative Funcs +void BS_CalcMetalBurstDmg(void) { - NATIVE_ARGS(u8 battler); - gBattleCommunication[0] = GetBattlerSide(GetBattlerForBattleScript(cmd->battler)); - gBattlescriptCurrInstr = cmd->nextInstr; -} + NATIVE_ARGS(const u8 *failInstr); -void BS_ItemRestoreHP(void) -{ - NATIVE_ARGS(const u8 *alreadyMaxHpInstr); - u16 healAmount; - u32 battler = MAX_BATTLERS_COUNT; - u32 healParam = ItemId_GetEffect(gLastUsedItem)[6]; - u32 side = GetBattlerSide(gBattlerAttacker); - struct Pokemon *party = GetSideParty(side); - u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); - u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); - gBattleCommunication[MULTIUSE_STATE] = 0; + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); + u8 sideTarget = 0; - if (hp == maxHP) + if (gProtectStructs[gBattlerAttacker].physicalDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].physicalBattlerId].hp) { - gBattlescriptCurrInstr = cmd->alreadyMaxHpInstr; - } - else - { - // Track the number of Revives used in a battle. - if (hp == 0 && side == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) - gBattleResults.numRevivesUsed++; + gBattleMoveDamage = gProtectStructs[gBattlerAttacker].physicalDmg * 150 / 100; - // Check if the recipient is an active battler. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - battler = BATTLE_PARTNER(gBattlerAttacker); - - // Get amount to heal. - switch (healParam) - { - case ITEM6_HEAL_HP_FULL: - healAmount = maxHP; - break; - case ITEM6_HEAL_HP_HALF: - healAmount = maxHP / 2; - break; - case ITEM6_HEAL_HP_QUARTER: - healAmount = maxHP / 4; - break; - default: - healAmount = healParam; - break; - } - if (hp + healAmount > maxHP) - healAmount = maxHP - hp; - - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); - - // Heal is applied as move damage if battler is active. - if (battler != MAX_BATTLERS_COUNT && hp != 0) - { - gBattleMoveDamage = -healAmount; - gBattlescriptCurrInstr = cmd->nextInstr; - } + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; else - { - hp += healAmount; - SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); + gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - // Revived battlers on the field need to be brought back. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) - { - gAbsentBattlerFlags &= ~gBitTable[battler]; - gBattleCommunication[MULTIUSE_STATE] = TRUE; - } - gBattlescriptCurrInstr = BattleScript_ItemRestoreHP_Party; - } + gBattlescriptCurrInstr = cmd->nextInstr; } -} - -void BS_ItemCureStatus(void) -{ - NATIVE_ARGS(const u8 *noStatusInstr); - u32 battler = gBattlerAttacker; - u32 side = GetBattlerSide(gBattlerAttacker); - u32 previousStatus2 = 0; - bool32 statusChanged = FALSE; - struct Pokemon *party = GetSideParty(side); - - // Heal Status2 conditions if battler is active. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + else if (gProtectStructs[gBattlerAttacker].specialDmg + && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) + && gBattleMons[gProtectStructs[gBattlerAttacker].specialBattlerId].hp) { - previousStatus2 = gBattleMons[battler].status2; - gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); - } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - { - battler = BATTLE_PARTNER(gBattlerAttacker); - previousStatus2 = gBattleMons[battler].status2; - gBattleMons[battler].status2 &= ~GetItemStatus2Mask(gLastUsedItem); - } + gBattleMoveDamage = gProtectStructs[gBattlerAttacker].specialDmg * 150 / 100; - if (previousStatus2 != gBattleMons[battler].status2) - statusChanged = TRUE; + if (IsAffectedByFollowMe(gBattlerAttacker, sideTarget, gCurrentMove)) + gBattlerTarget = gSideTimers[sideTarget].followmeTarget; + else + gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - // Heal Status1 conditions. - if (!HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], GetItemStatus1Mask(gLastUsedItem), battler)) - { - statusChanged = TRUE; - if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) - gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; - if (GetItemStatus2Mask(gLastUsedItem) & STATUS2_CONFUSION) - gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION; - } - - if (statusChanged) - { - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = cmd->noStatusInstr; + gBattlescriptCurrInstr = cmd->failInstr; } } -void BS_ItemIncreaseStat(void) +void BS_JumpIfCantFling(void) { - NATIVE_ARGS(); - u16 statId = ItemId_GetEffect(gLastUsedItem)[1]; - u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); - SET_STATCHANGER(statId, stages, FALSE); - gBattlescriptCurrInstr = cmd->nextInstr; + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (!CanFling(battler)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } -void BS_ItemRestorePP(void) +void BS_JumpIfMoreThanHalfHP(void) { - NATIVE_ARGS(); - const u8 *effect = ItemId_GetEffect(gLastUsedItem); - u32 i, pp, maxPP, moveId, loopEnd; - u32 battler = MAX_BATTLERS_COUNT; - struct Pokemon *mon = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; - u16 species = GetMonData(mon, MON_DATA_SPECIES); + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); - // // Check whether to apply to all moves. - if (effect[4] & ITEM4_HEAL_PP_ONE) + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gBattleMons[battler].hp > (gBattleMons[battler].maxHP + 1) / 2) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_DoStockpileStatChangesWearOff(void) +{ + NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gDisableStructs[battler].stockpileDef != 0) { - i = gBattleStruct->itemMoveIndex[gBattlerAttacker]; - loopEnd = i + 1; + SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); + gDisableStructs[battler].stockpileDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; + } + else if (gDisableStructs[battler].stockpileSpDef) + { + SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); + gDisableStructs[battler].stockpileSpDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; } else { - i = 0; - loopEnd = MAX_MON_MOVES; + gBattlescriptCurrInstr = cmd->nextInstr; } - - // Check if the recipient is an active battler. - if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) - battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) - battler = BATTLE_PARTNER(gBattlerAttacker); - - // Heal PP! - for (; i < loopEnd; i++) - { - pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); - moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); - maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); - if (pp != maxPP) - { - pp += effect[6]; - if (pp > maxPP) - pp = maxPP; - SetMonData(mon, MON_DATA_PP1 + i, &pp); - - // Update battler PP if needed. - if (battler != MAX_BATTLERS_COUNT - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battler] - && MOVE_IS_PERMANENT(battler, i)) - { - gBattleMons[battler].pp[i] = pp; - } - } - } - gBattleScripting.battler = battler; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, species); - gBattlescriptCurrInstr = cmd->nextInstr; -} - -void BS_RunStatChangeItems(void) -{ - NATIVE_ARGS(u8 battler); - - // Change instruction before calling ItemBattleEffects. - gBattlescriptCurrInstr = cmd->nextInstr; - ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, GetBattlerForBattleScript(cmd->battler), FALSE); // TODO: update } static bool32 CriticalCapture(u32 odds) @@ -16169,16 +16055,29 @@ static bool8 IsFinalStrikeEffect(u16 move) return FALSE; } -void BS_TryRevertWeatherForm(void) +static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 byIntimidate) { - NATIVE_ARGS(); - if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) + switch (abilityDef) { - gBattleScripting.battler = gBattlerTarget; - BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; - return; + case ABILITY_CLEAR_BODY: + case ABILITY_FULL_METAL_BODY: + case ABILITY_WHITE_SMOKE: + return TRUE; + case ABILITY_INNER_FOCUS: + case ABILITY_SCRAPPY: + case ABILITY_OWN_TEMPO: + case ABILITY_OBLIVIOUS: + if (byIntimidate && (B_UPDATED_INTIMIDATE >= GEN_8)) + return TRUE; + break; } + return FALSE; +} + +void BS_GetBattlerSide(void) +{ + NATIVE_ARGS(u8 battler); + gBattleCommunication[0] = GetBattlerSide(GetBattlerForBattleScript(cmd->battler)); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -16200,6 +16099,25 @@ void BS_TrySymbiosis(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_SetZEffect(void) // TODO: Z-Moves +{ + NATIVE_ARGS(); + // SetZEffect(); // Handles battle script jumping internally + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetMaxMoveEffect(void) // TODO: Dynamax +{ + NATIVE_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetSteelsurge(void) // TODO: Dynamax +{ + NATIVE_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; +} + static void TryUpdateRoundTurnOrder(void) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) @@ -16372,29 +16290,365 @@ static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 use } } -void BS_DoStockpileStatChangesWearOff(void) +void BS_ItemRestoreHP(void) { - NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + NATIVE_ARGS(const u8 *alreadyMaxHpInstr); + u16 healAmount; + u32 battler = MAX_BATTLERS_COUNT; + u32 healParam = ItemId_GetEffect(gLastUsedItem)[6]; + u32 side = GetBattlerSide(gBattlerAttacker); + struct Pokemon *party = GetSideParty(side); + u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); + u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); + gBattleCommunication[MULTIUSE_STATE] = 0; - u32 battler = GetBattlerForBattleScript(cmd->battler); - if (gDisableStructs[battler].stockpileDef != 0) + if (hp == maxHP) { - SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); - gDisableStructs[battler].stockpileDef = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = cmd->statChangeInstr; - } - else if (gDisableStructs[battler].stockpileSpDef) - { - SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); - gDisableStructs[battler].stockpileSpDef = 0; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = cmd->statChangeInstr; + gBattlescriptCurrInstr = cmd->alreadyMaxHpInstr; } else { + // Track the number of Revives used in a battle. + if (hp == 0 && side == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) + gBattleResults.numRevivesUsed++; + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battler = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battler = BATTLE_PARTNER(gBattlerAttacker); + + // Get amount to heal. + switch (healParam) + { + case ITEM6_HEAL_HP_FULL: + healAmount = maxHP; + break; + case ITEM6_HEAL_HP_HALF: + healAmount = maxHP / 2; + break; + case ITEM6_HEAL_HP_QUARTER: + healAmount = maxHP / 4; + break; + default: + healAmount = healParam; + break; + } + if (hp + healAmount > maxHP) + healAmount = maxHP - hp; + + gBattleScripting.battler = battler; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); + + // Heal is applied as move damage if battler is active. + if (battler != MAX_BATTLERS_COUNT && hp != 0) + { + gBattleMoveDamage = -healAmount; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + hp += healAmount; + SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); + + // Revived battlers on the field need to be brought back. + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) + { + gAbsentBattlerFlags &= ~gBitTable[battler]; + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + gBattlescriptCurrInstr = BattleScript_ItemRestoreHP_Party; + } + } +} + +void BS_ItemCureStatus(void) +{ + NATIVE_ARGS(const u8 *noStatusInstr); + u32 battler = gBattlerAttacker; + u32 side = GetBattlerSide(gBattlerAttacker); + u32 previousStatus2 = 0; + bool32 statusChanged = FALSE; + struct Pokemon *party = GetSideParty(side); + + // Heal Status2 conditions if battler is active. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + { + previousStatus2 = gBattleMons[battler].status2; + gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + { + battler = BATTLE_PARTNER(gBattlerAttacker); + previousStatus2 = gBattleMons[battler].status2; + gBattleMons[battler].status2 &= ~GetItemStatus2Mask(gLastUsedItem); + } + + if (previousStatus2 != gBattleMons[battler].status2) + statusChanged = TRUE; + + // Heal Status1 conditions. + if (!HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], GetItemStatus1Mask(gLastUsedItem), battler)) + { + statusChanged = TRUE; + if (GetItemStatus1Mask(gLastUsedItem) & STATUS1_SLEEP) + gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE; + if (GetItemStatus2Mask(gLastUsedItem) & STATUS2_CONFUSION) + gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION; + } + + if (statusChanged) + { + gBattleScripting.battler = battler; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_SPECIES)); gBattlescriptCurrInstr = cmd->nextInstr; } + else + { + gBattlescriptCurrInstr = cmd->noStatusInstr; + } +} + +void BS_ItemIncreaseStat(void) +{ + NATIVE_ARGS(); + u16 statId = ItemId_GetEffect(gLastUsedItem)[1]; + u16 stages = ItemId_GetHoldEffectParam(gLastUsedItem); + SET_STATCHANGER(statId, stages, FALSE); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryHealPulse(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (BATTLER_MAX_HP(gBattlerTarget)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + if (GetBattlerAbility(gBattlerAttacker) == ABILITY_MEGA_LAUNCHER && gMovesInfo[gCurrentMove].pulseMove) + gBattleMoveDamage = -(/* GetNonDynamaxMaxHP(gBattlerTarget) */ gBattleMons[gBattlerTarget].maxHP * 75 / 100); // TODO: Dynamax + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_FLORAL_HEALING) + gBattleMoveDamage = -(/* GetNonDynamaxMaxHP(gBattlerTarget) */ gBattleMons[gBattlerTarget].maxHP * 2 / 3); // TODO: Dynamax + else + gBattleMoveDamage = -(/* GetNonDynamaxMaxHP(gBattlerTarget) */ gBattleMons[gBattlerTarget].maxHP / 2); // TODO: Dynamax + + if (gBattleMoveDamage == 0) + gBattleMoveDamage = -1; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TryCopycat(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (gLastUsedMove == MOVE_NONE || gLastUsedMove == MOVE_UNAVAILABLE || gMovesInfo[gLastUsedMove].copycatBanned) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + if (FALSE/* IsMaxMove(gLastUsedMove) */) // TODO: Dynamax + gCalledMove = gBattleStruct->dynamax.lastUsedBaseMove; + else + gCalledMove = gLastUsedMove; + + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TryDefog(void) +{ + NATIVE_ARGS(u8 clear, const u8 *failInstr); + + if (cmd->clear) + { + if (TryDefogClear(gEffectBattler, TRUE)) + return; + else + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + if (TryDefogClear(gBattlerAttacker, FALSE)) + gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_TryUpperHand(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + || gChosenMoveByBattler[gBattlerTarget] == MOVE_NONE + || IS_MOVE_STATUS(gChosenMoveByBattler[gBattlerTarget]) + || GetChosenMovePriority(gBattlerTarget) < 1 || GetChosenMovePriority(gBattlerTarget) > 3) // Fails if priority is less than 1 or greater than 3, if target already moved, or if using a status + gBattlescriptCurrInstr = cmd->failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryTriggerStatusForm(void) +{ + NATIVE_ARGS(); + if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_STATUS)) + { + gBattleScripting.battler = gBattlerTarget; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; + return; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_AllySwitchSwapBattler(void) +{ + NATIVE_ARGS(); + + gBattleScripting.battler = gBattlerAttacker; + gBattlerAttacker ^= BIT_FLANK; + gProtectStructs[gBattlerAttacker].usedAllySwitch = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_AllySwitchFailChance(void) +{ + NATIVE_ARGS(const u8 *failInstr); + + if (B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9) + { + TryResetProtectUseCounter(gBattlerAttacker); + if (sProtectSuccessRates[gDisableStructs[gBattlerAttacker].protectUses] < Random()) + { + gDisableStructs[gBattlerAttacker].protectUses = 0; + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + else + { + gDisableStructs[gBattlerAttacker].protectUses++; + } + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetPhotonGeyserCategory(void) +{ + NATIVE_ARGS(); + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_RunStatChangeItems(void) +{ + NATIVE_ARGS(u8 battler); + + // Change instruction before calling ItemBattleEffects. + gBattlescriptCurrInstr = cmd->nextInstr; + ItemBattleEffects(ITEMEFFECT_STATS_CHANGED, GetBattlerForBattleScript(cmd->battler), FALSE); // TODO: update +} + +void BS_ItemRestorePP(void) +{ + NATIVE_ARGS(); + const u8 *effect = ItemId_GetEffect(gLastUsedItem); + u32 i, pp, maxPP, moveId, loopEnd; + u32 battler = MAX_BATTLERS_COUNT; + struct Pokemon *mon = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? &gPlayerParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]] : &gEnemyParty[gBattleStruct->itemPartyIndex[gBattlerAttacker]]; + u16 species = GetMonData(mon, MON_DATA_SPECIES); + + // // Check whether to apply to all moves. + if (effect[4] & ITEM4_HEAL_PP_ONE) + { + i = gBattleStruct->itemMoveIndex[gBattlerAttacker]; + loopEnd = i + 1; + } + else + { + i = 0; + loopEnd = MAX_MON_MOVES; + } + + // Check if the recipient is an active battler. + if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) + battler = gBattlerAttacker; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + battler = BATTLE_PARTNER(gBattlerAttacker); + + // Heal PP! + for (; i < loopEnd; i++) + { + pp = GetMonData(mon, MON_DATA_PP1 + i, NULL); + moveId = GetMonData(mon, MON_DATA_MOVE1 + i, NULL); + maxPP = CalculatePPWithBonus(moveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), i); + if (pp != maxPP) + { + pp += effect[6]; + if (pp > maxPP) + pp = maxPP; + SetMonData(mon, MON_DATA_PP1 + i, &pp); + + // Update battler PP if needed. + if (battler != MAX_BATTLERS_COUNT + && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[battler] + && MOVE_IS_PERMANENT(battler, i)) + { + gBattleMons[battler].pp[i] = pp; + } + } + } + gBattleScripting.battler = battler; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, species); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryRevertWeatherForm(void) +{ + NATIVE_ARGS(); + if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_BATTLE_WEATHER)) + { + gBattleScripting.battler = gBattlerTarget; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup; + return; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetSnow(void) +{ + NATIVE_ARGS(); + + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SNOW, FALSE)) + { + gMoveResultFlags |= MOVE_RESULT_MISSED; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED; + + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW; + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_HandleMegaEvolution(void) +{ + NATIVE_ARGS(u8 battler, u8 caseId); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_MEGA_EVOLUTION); + gBattlescriptCurrInstr = cmd->nextInstr; } void BS_HandlePrimalReversion(void) @@ -16406,6 +16660,147 @@ void BS_HandlePrimalReversion(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_HandleUltraBurst(void) +{ + NATIVE_ARGS(u8 battler, u8 caseId); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + HandleScriptMegaPrimalBurst(cmd->caseId, battler, HANDLE_TYPE_ULTRA_BURST); + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfShellTrap(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + if (gProtectStructs[battler].shellTrap) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfEmergencyExited(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u8 battler = GetBattlerForBattleScript(cmd->battler); + if (gSpecialStatuses[battler].emergencyExited) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfRod(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + if (IsElectricAbilityAffected(ABILITY_LIGHTNING_ROD)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfAbsorb(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + if (IsElectricAbilityAffected(ABILITY_VOLT_ABSORB)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfMotor(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + if (IsElectricAbilityAffected(ABILITY_MOTOR_DRIVE)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_ApplySaltCure(void) +{ + NATIVE_ARGS(u8 battler); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + gStatuses4[battler] |= STATUS4_SALT_CURE; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_JumpIfArgument(void) +{ + NATIVE_ARGS(u8 argument, const u8 *jumpInstr); + + if (gMovesInfo[gCurrentMove].argument == cmd->argument) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetRemoveTerrain(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + u32 statusFlag = 0; + + switch (gMovesInfo[gCurrentMove].effect) + { + case EFFECT_MISTY_TERRAIN: + statusFlag = STATUS_FIELD_MISTY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_MISTY; + break; + case EFFECT_GRASSY_TERRAIN: + statusFlag = STATUS_FIELD_GRASSY_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_GRASSY; + break; + case EFFECT_ELECTRIC_TERRAIN: + statusFlag = STATUS_FIELD_ELECTRIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_ELECTRIC; + break; + case EFFECT_PSYCHIC_TERRAIN: + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + break; + case EFFECT_HIT_SET_REMOVE_TERRAIN: + switch (gMovesInfo[gCurrentMove].argument) + { + case ARG_SET_PSYCHIC_TERRAIN: // Genesis Supernova + statusFlag = STATUS_FIELD_PSYCHIC_TERRAIN; + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAIN_SET_PSYCHIC; + break; + case ARG_TRY_REMOVE_TERRAIN_HIT: // Splintered Stormshards + case ARG_TRY_REMOVE_TERRAIN_FAIL: // Steel Roller + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + { + // No terrain to remove, jump to battle script pointer. + gBattlescriptCurrInstr = cmd->jumpInstr; + } + else + { + // Remove all terrains. + RemoveAllTerrains(); + gBattlescriptCurrInstr = cmd->nextInstr; + } + return; + default: + break; + } + break; + } + + if (gFieldStatuses & statusFlag || statusFlag == 0) + { + gBattlescriptCurrInstr = cmd->jumpInstr; + } + else + { + u16 atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); + + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; + gFieldStatuses |= statusFlag; + gFieldTimers.terrainTimer = (atkHoldEffect == HOLD_EFFECT_TERRAIN_EXTENDER) ? 8 : 5; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + void BS_JumpIfTerrainAffected(void) { NATIVE_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); @@ -16417,6 +16812,260 @@ void BS_JumpIfTerrainAffected(void) gBattlescriptCurrInstr = cmd->nextInstr; } +void BS_TryReflectType(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species); + u8 targetType1 = GetBattlerType(gBattlerTarget, 0); + u8 targetType2 = GetBattlerType(gBattlerTarget, 1); + u8 targetType3 = GetBattlerType(gBattlerTarget, 2); + + if (targetBaseSpecies == SPECIES_ARCEUS || targetBaseSpecies == SPECIES_SILVALLY) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (IS_BATTLER_TYPELESS(gBattlerTarget)) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else if (targetType1 == TYPE_MYSTERY && targetType2 == TYPE_MYSTERY && targetType3 != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].type2 = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetType1 == TYPE_MYSTERY && targetType2 != TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = targetType2; + gBattleMons[gBattlerAttacker].type2 = targetType2; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else if (targetType1 != TYPE_MYSTERY && targetType2 == TYPE_MYSTERY) + { + gBattleMons[gBattlerAttacker].type1 = targetType1; + gBattleMons[gBattlerAttacker].type2 = targetType1; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattleMons[gBattlerAttacker].type1 = targetType1; + gBattleMons[gBattlerAttacker].type2 = targetType2; + gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TrySetOctolock(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + + if (gDisableStructs[battler].octolock) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[battler].octolock = TRUE; + gBattleMons[battler].status2 |= STATUS2_ESCAPE_PREVENTION; + gDisableStructs[battler].battlerPreventingEscape = gBattlerAttacker; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_SetGlaiveRush(void) +{ + NATIVE_ARGS(); + + gStatuses4[gBattlerAttacker] |= STATUS4_GLAIVE_RUSH; + + gBattlescriptCurrInstr = cmd->nextInstr; +} + +// TODO: Convert this to a proper FORM_CHANGE type. +void BS_TryRelicSong(void) +{ + NATIVE_ARGS(); + + if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SHEER_FORCE && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED)) + { + if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_ARIA) + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_PIROUETTE; + else if (gBattleMons[gBattlerAttacker].species == SPECIES_MELOETTA_PIROUETTE) + gBattleMons[gBattlerAttacker].species = SPECIES_MELOETTA_ARIA; + + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_AttackerFormChangeMoveEffect; + } + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_SetPledge(void) +{ + NATIVE_ARGS(const u8 *jumpInstr); + + u32 partner = BATTLE_PARTNER(gBattlerAttacker); + u32 partnerMove = gBattleMons[partner].moves[gBattleStruct->chosenMovePositions[partner]]; + u32 i = 0; + u32 k = 0; + + if (gBattleStruct->pledgeMove) + { + PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); + gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; + + if ((gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_WATER_PLEDGE) + || (gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE)) + { + gCurrentMove = MOVE_GRASS_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Grass; + } + else if ((gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_GRASS_PLEDGE) + || (gCurrentMove == MOVE_GRASS_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE)) + { + gCurrentMove = MOVE_FIRE_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Fire; + } + else if ((gCurrentMove == MOVE_WATER_PLEDGE && partnerMove == MOVE_FIRE_PLEDGE) + || (gCurrentMove == MOVE_FIRE_PLEDGE && partnerMove == MOVE_WATER_PLEDGE)) + { + gCurrentMove = MOVE_WATER_PLEDGE; + gBattlescriptCurrInstr = BattleScript_EffectCombinedPledge_Water; + } + + gBattleCommunication[MSG_DISPLAY] = 0; + } + else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) + && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsBattlerAlive(partner) + && gCurrentMove != partnerMove + && gMovesInfo[partnerMove].effect == EFFECT_PLEDGE) + { + u32 currPledgeUser = 0; + u32 newTurnOrder[] = {0xFF, 0xFF}; + + for (i = 0; i < gBattlersCount; i++) + { + if (gBattlerByTurnOrder[i] == gBattlerAttacker) + { + currPledgeUser = i + 1; // Current battler going after attacker + break; + } + } + for (i = currPledgeUser; i < gBattlersCount; i++) + { + if (gBattlerByTurnOrder[i] != partner) + { + newTurnOrder[k] = gBattlerByTurnOrder[i]; + k++; + } + } + + gBattlerByTurnOrder[currPledgeUser] = partner; + currPledgeUser++; + + for (i = 0; newTurnOrder[i] != 0xFF && i < 2; i++) + { + gBattlerByTurnOrder[currPledgeUser] = newTurnOrder[i]; + currPledgeUser++; + } + + gBattleStruct->pledgeMove = TRUE; + gBattleScripting.battler = partner; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->jumpInstr; + + } +} + +void BS_SetPledgeStatus(void) +{ + NATIVE_ARGS(u8 battler, u32 sideStatus); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + u32 side = GetBattlerSide(battler); + + gBattleStruct->pledgeMove = FALSE; + if (!(gSideStatuses[side] & cmd->sideStatus)) + { + gSideStatuses[side] |= cmd->sideStatus; + + switch (cmd->sideStatus) + { + case SIDE_STATUS_RAINBOW: + gSideTimers[side].rainbowTimer = 4; + break; + case SIDE_STATUS_SEA_OF_FIRE: + gSideTimers[side].seaOfFireTimer = 4; + break; + case SIDE_STATUS_SWAMP: + gSideTimers[side].swampTimer = 4; + } + + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + gBattlescriptCurrInstr = BattleScript_MoveEnd; +} + +void BS_TryTrainerSlideZMoveMsg(void) +{ + NATIVE_ARGS(); + // TODO: trainer slide + // s32 shouldSlide; + + // if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_Z_MOVE))) + // { + // gBattleScripting.battler = gBattlerAttacker; + // BattleScriptPush(cmd->nextInstr); + // gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + // } + // else + // gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryTrainerSlideMegaEvolutionMsg(void) +{ + NATIVE_ARGS(); + // TODO: trainer slide + // s32 shouldSlide; + + // if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_MEGA_EVOLUTION))) + // { + // gBattleScripting.battler = gBattlerAttacker; + // BattleScriptPush(cmd->nextInstr); + // gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + // } + // else + // gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryTrainerSlideDynamaxMsg(void) +{ + NATIVE_ARGS(); + // TODO: trainer slide + // s32 shouldSlide; + + // if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_DYNAMAX))) + // { + // gBattleScripting.battler = gBattlerAttacker; + // BattleScriptPush(cmd->nextInstr); + // gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); + // } + // else + // gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_CheckParentalBondCounter(void) { NATIVE_ARGS(u8 counter, const u8 *jumpInstr); @@ -16428,23 +17077,16 @@ void BS_CheckParentalBondCounter(void) gBattlescriptCurrInstr = cmd->nextInstr; } -static bool8 CanAbilityPreventStatLoss(u16 abilityDef, bool8 byIntimidate) +void BS_JumpIfCantLoseItem(void) { - switch (abilityDef) - { - case ABILITY_CLEAR_BODY: - case ABILITY_FULL_METAL_BODY: - case ABILITY_WHITE_SMOKE: - return TRUE; - case ABILITY_INNER_FOCUS: - case ABILITY_SCRAPPY: - case ABILITY_OWN_TEMPO: - case ABILITY_OBLIVIOUS: - if (byIntimidate && (B_UPDATED_INTIMIDATE >= GEN_8)) - return TRUE; - break; - } - return FALSE; + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u8 battler = GetBattlerForBattleScript(cmd->battler); + u16 item = gBattleMons[battler].item; + + if (item == ITEM_NONE || !CanBattlerGetOrLoseItem(battler, item)) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; } void BS_TryUpdateRecoilTracker(void) @@ -16500,3 +17142,36 @@ void BS_TryGulpMissile(void) gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_TryQuash(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 i; + + // It's true if foe is faster, has a bigger priority, or switches + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + + // If the above condition is not true, it means we are faster than the foe, so we can set the quash bit + gProtectStructs[gBattlerTarget].quash = TRUE; + for (i = 0; i < gBattlersCount; i++) + { + gBattlerByTurnOrder[i] = i; + } + for (i = 0; i < gBattlersCount - 1; i++) + { + s32 j; + for (j = i + 1; j < gBattlersCount; j++) + { + if (!gProtectStructs[i].quash + && !gProtectStructs[j].quash + && GetWhichBattlerFaster(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE) == -1) + SwapTurnOrder(i, j); + } + } + gBattlescriptCurrInstr = cmd->nextInstr; +} + diff --git a/src/battle_util.c b/src/battle_util.c index e4638739d..eaa93bee2 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8984,6 +8984,24 @@ bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument) return (gMovesInfo[move].argument == argument) && MoveHasAdditionalEffectSelf(move, moveEffect); } +// Photon geyser & light that burns the sky +u8 GetCategoryBasedOnStats(u32 battler) +{ + u32 attack = gBattleMons[battler].attack; + u32 spAttack = gBattleMons[battler].spAttack; + + attack = attack * gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][0]; + attack = attack / gStatStageRatios[gBattleMons[battler].statStages[STAT_ATK]][1]; + + spAttack = spAttack * gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][0]; + spAttack = spAttack / gStatStageRatios[gBattleMons[battler].statStages[STAT_SPATK]][1]; + + if (spAttack >= attack) + return DAMAGE_CATEGORY_SPECIAL; + else + return DAMAGE_CATEGORY_PHYSICAL; +} + static u32 GetFlingPowerFromItemId(u32 itemId) { if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) @@ -8997,6 +9015,21 @@ static u32 GetFlingPowerFromItemId(u32 itemId) return ItemId_GetFlingPower(itemId); } +bool32 CanFling(u32 battler) +{ + u16 item = gBattleMons[battler].item; + + if (item == ITEM_NONE + || (B_KLUTZ_FLING_INTERACTION >= GEN_5 && GetBattlerAbility(battler) == ABILITY_KLUTZ) + || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM + || gDisableStructs[battler].embargoTimer != 0 + || GetFlingPowerFromItemId(item) == 0 + || !CanBattlerGetOrLoseItem(battler, item)) + return FALSE; + + return TRUE; +} + static void SetRandomMultiHitCounter() { if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_LOADED_DICE) diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index beecf35ff..71052f935 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2,12 +2,11 @@ #include "battle_scripts.h" #include "constants/battle_move_effects.h" -// TODO: use correct battlescripts, currently replaced with _EffectHit const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = { [EFFECT_PLACEHOLDER] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPlaceholder, }, [EFFECT_HIT] = @@ -55,7 +54,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SPEED_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpeedUp, .encourageEncore = TRUE, }, @@ -67,13 +66,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SPECIAL_DEFENSE_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialDefenseUp, .encourageEncore = TRUE, }, [EFFECT_ACCURACY_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAccuracyUp, .encourageEncore = TRUE, }, @@ -84,7 +83,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SPECIAL_ATTACK_UP_3] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialAttackUp3, }, [EFFECT_ATTACK_DOWN] = @@ -104,12 +103,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SPECIAL_ATTACK_DOWN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialAttackDown, }, [EFFECT_SPECIAL_DEFENSE_DOWN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialDefenseDown, }, [EFFECT_ACCURACY_DOWN] = @@ -192,12 +191,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FIXED_DAMAGE_ARG] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFixedDamageArg, }, [EFFECT_HEAL_BLOCK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHealBlock, .encourageEncore = TRUE, }, @@ -226,43 +225,43 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ATTACK_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAttackUp2, .encourageEncore = TRUE, }, [EFFECT_DEFENSE_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDefenseUp2, .encourageEncore = TRUE, }, [EFFECT_SPEED_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpeedUp2, .encourageEncore = TRUE, }, [EFFECT_SPECIAL_ATTACK_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialAttackUp2, .encourageEncore = TRUE, }, [EFFECT_SPECIAL_DEFENSE_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialDefenseUp2, .encourageEncore = TRUE, }, [EFFECT_ACCURACY_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAccuracyUp2, .encourageEncore = TRUE, }, [EFFECT_EVASION_UP_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectEvasionUp2, }, [EFFECT_TRANSFORM] = @@ -272,37 +271,37 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ATTACK_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAttackDown2, }, [EFFECT_DEFENSE_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDefenseDown2, }, [EFFECT_SPEED_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpeedDown2, }, [EFFECT_SPECIAL_ATTACK_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialAttackDown2, }, [EFFECT_SPECIAL_DEFENSE_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpecialDefenseDown2, }, [EFFECT_ACCURACY_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAccuracyDown2, }, [EFFECT_EVASION_DOWN_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectEvasionDown2, }, [EFFECT_REFLECT] = @@ -399,7 +398,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_CONVERSION_2] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectConversion2, .encourageEncore = TRUE, }, @@ -476,7 +475,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HEALING_WISH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHealingWish, }, [EFFECT_PROTECT] = @@ -576,7 +575,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_CAPTIVATE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCaptivate, }, [EFFECT_MORNING_SUN] = @@ -650,7 +649,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SOLAR_BEAM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTwoTurnsAttack, .twoTurnEffect = TRUE, }, @@ -671,7 +670,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SEMI_INVULNERABLE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTwoTurnsAttack, .twoTurnEffect = TRUE, .semiInvulnerableEffect = TRUE, }, @@ -690,7 +689,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FIRST_TURN_ONLY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFirstTurnOnly, .encourageEncore = TRUE, }, @@ -719,7 +718,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_WORRY_SEED] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectWorrySeed, .encourageEncore = TRUE, }, @@ -844,7 +843,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_YAWN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectYawn, }, [EFFECT_KNOCK_OFF] = @@ -898,7 +897,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_HIT_ESCAPE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHitEscape, }, [EFFECT_MUD_SPORT] = @@ -955,18 +954,18 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_PLEDGE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPledge, }, [EFFECT_FLING] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFling, .encourageEncore = TRUE, }, [EFFECT_NATURAL_GIFT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectNaturalGift, .encourageEncore = TRUE, }, @@ -1057,69 +1056,69 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ROOST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectRoost, .encourageEncore = TRUE, }, [EFFECT_GRAVITY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGravity, .encourageEncore = TRUE, }, [EFFECT_MIRACLE_EYE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMircleEye, .encourageEncore = TRUE, }, [EFFECT_TAILWIND] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTailwind, .encourageEncore = TRUE, }, [EFFECT_EMBARGO] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectEmbargo, .encourageEncore = TRUE, }, [EFFECT_AQUA_RING] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAquaRing, .encourageEncore = TRUE, }, [EFFECT_TRICK_ROOM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTrickRoom, }, [EFFECT_WONDER_ROOM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectWonderRoom, }, [EFFECT_MAGIC_ROOM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMagicRoom, }, [EFFECT_MAGNET_RISE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMagnetRise, .encourageEncore = TRUE, }, [EFFECT_TOXIC_SPIKES] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectToxicSpikes, }, [EFFECT_GASTRO_ACID] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGastroAcid, }, [EFFECT_STEALTH_ROCK] = @@ -1130,84 +1129,84 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_TELEKINESIS] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTelekinesis, .encourageEncore = TRUE, }, [EFFECT_POWER_SWAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPowerSwap, .encourageEncore = TRUE, }, [EFFECT_GUARD_SWAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGuardSwap, .encourageEncore = TRUE, }, [EFFECT_HEART_SWAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHeartSwap, }, [EFFECT_POWER_SPLIT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPowerSplit, }, [EFFECT_GUARD_SPLIT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGuardSplit, }, [EFFECT_STICKY_WEB] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectStickyWeb, .encourageEncore = TRUE, }, [EFFECT_METAL_BURST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMetalBurst, }, [EFFECT_LUCKY_CHANT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectLuckyChant, .encourageEncore = TRUE, }, [EFFECT_SUCKER_PUNCH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSuckerPunch, }, [EFFECT_SIMPLE_BEAM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSimpleBeam, }, [EFFECT_ENTRAINMENT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectEntrainment, }, [EFFECT_HEAL_PULSE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHealPulse, .encourageEncore = TRUE, }, [EFFECT_QUASH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectQuash, .encourageEncore = TRUE, }, [EFFECT_ION_DELUGE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectIonDeluge, }, [EFFECT_FREEZE_DRY] = @@ -1217,38 +1216,38 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_TOPSY_TURVY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTopsyTurvy, }, [EFFECT_MISTY_TERRAIN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMistyTerrain, }, [EFFECT_GRASSY_TERRAIN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGrassyTerrain, }, [EFFECT_ELECTRIC_TERRAIN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectElectricTerrain, }, [EFFECT_PSYCHIC_TERRAIN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPsychicTerrain, }, [EFFECT_ATTACK_ACCURACY_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAttackAccUp, .encourageEncore = TRUE, }, [EFFECT_ATTACK_SPATK_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAttackSpAttackUp, .encourageEncore = TRUE, }, @@ -1259,88 +1258,88 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_ME_FIRST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMeFirst, }, [EFFECT_QUIVER_DANCE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectQuiverDance, }, [EFFECT_COIL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCoil, .encourageEncore = TRUE, }, [EFFECT_ELECTRIFY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectElectrify, }, [EFFECT_REFLECT_TYPE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectReflectType, .encourageEncore = TRUE, }, [EFFECT_SOAK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSoak, }, [EFFECT_GROWTH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGrowth, .encourageEncore = TRUE, }, [EFFECT_LAST_RESORT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectLastResort, }, [EFFECT_SHELL_SMASH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShellSmash, .encourageEncore = TRUE, }, [EFFECT_SHIFT_GEAR] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShiftGear, .encourageEncore = TRUE, }, [EFFECT_DEFENSE_UP_3] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDefenseUp3, .encourageEncore = TRUE, }, [EFFECT_NOBLE_ROAR] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectNobleRoar, }, [EFFECT_VENOM_DRENCH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectVenomDrench, }, [EFFECT_TOXIC_THREAD] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectToxicThread, }, [EFFECT_HIT_SWITCH_TARGET] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHitSwitchTarget, }, [EFFECT_FINAL_GAMBIT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFinalGambit, }, [EFFECT_CHANGE_TYPE_ON_ITEM] = @@ -1350,67 +1349,67 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_AUTOTOMIZE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAutotomize, .encourageEncore = TRUE, }, [EFFECT_COPYCAT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCopycat, }, [EFFECT_DEFOG] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDefog, .encourageEncore = TRUE, }, [EFFECT_HIT_ENEMY_HEAL_ALLY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHitEnemyHealAlly, }, [EFFECT_SYNCHRONOISE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSynchronoise, }, [EFFECT_PSYCHO_SHIFT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPsychoShift, }, [EFFECT_POWER_TRICK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPowerTrick, .encourageEncore = TRUE, }, [EFFECT_AFTER_YOU] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAfterYou, .encourageEncore = TRUE, }, [EFFECT_BESTOW] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectBestow, .encourageEncore = TRUE, }, [EFFECT_ROTOTILLER] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectRototiller, }, [EFFECT_FLOWER_SHIELD] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFlowerShield, }, [EFFECT_SPEED_SWAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSpeedSwap, }, [EFFECT_REVELATION_DANCE] = @@ -1420,29 +1419,29 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_AURORA_VEIL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAuroraVeil, .encourageEncore = TRUE, }, [EFFECT_THIRD_TYPE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectThirdType, }, [EFFECT_ACUPRESSURE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAcupressure, }, [EFFECT_AROMATIC_MIST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAromaticMist, .encourageEncore = TRUE, }, [EFFECT_POWDER] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPowder, }, [EFFECT_BELCH] = @@ -1452,12 +1451,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_PARTING_SHOT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPartingShot, }, [EFFECT_MAT_BLOCK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMatBlock, .encourageEncore = TRUE, }, @@ -1468,73 +1467,73 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_INSTRUCT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectInstruct, }, [EFFECT_LASER_FOCUS] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectLaserFocus, .encourageEncore = TRUE, }, [EFFECT_MAGNETIC_FLUX] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMagneticFlux, .encourageEncore = TRUE, }, [EFFECT_GEAR_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGearUp, .encourageEncore = TRUE, }, [EFFECT_STRENGTH_SAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectStrengthSap, }, [EFFECT_MIND_BLOWN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMindBlown, }, [EFFECT_PURIFY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPurify, .encourageEncore = TRUE, }, [EFFECT_FAIL_IF_NOT_ARG_TYPE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_FailIfNotArgType, }, [EFFECT_SHORE_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShoreUp, .encourageEncore = TRUE, }, [EFFECT_GEOMANCY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGeomancy, .twoTurnEffect = TRUE, }, [EFFECT_FAIRY_LOCK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFairyLock, }, [EFFECT_ALLY_SWITCH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAllySwitch, }, [EFFECT_RELIC_SONG] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectRelicSong, }, [EFFECT_BODY_PRESS] = @@ -1544,18 +1543,18 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_EERIE_SPELL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectEerieSpell, }, [EFFECT_JUNGLE_HEALING] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectJungleHealing, .encourageEncore = TRUE, }, [EFFECT_COACHING] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCoaching, }, [EFFECT_LASH_OUT] = @@ -1575,7 +1574,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_DECORATE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDecorate, .encourageEncore = TRUE, }, @@ -1586,12 +1585,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_RECOIL_HP_25] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectRecoilHP25, }, [EFFECT_STUFF_CHEEKS] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectStuffCheeks, .encourageEncore = TRUE, }, @@ -1602,52 +1601,52 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_GLITZY_GLOW] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGlitzyGlow, }, [EFFECT_BADDY_BAD] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectBaddyBad, }, [EFFECT_SAPPY_SEED] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSappySeed, }, [EFFECT_FREEZY_FROST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFreezyFrost, }, [EFFECT_SPARKLY_SWIRL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSparklySwirl, }, [EFFECT_PLASMA_FISTS] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPlasmaFists, }, [EFFECT_HYPERSPACE_FURY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHyperspaceFury, }, [EFFECT_AURA_WHEEL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAuraWheel, }, [EFFECT_PHOTON_GEYSER] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPhotonGeyser, }, [EFFECT_SHELL_SIDE_ARM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShellSideArm, }, [EFFECT_TERRAIN_PULSE] = @@ -1657,28 +1656,28 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_NO_RETREAT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectNoRetreat, .encourageEncore = TRUE, }, [EFFECT_TAR_SHOT] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTarShot, }, [EFFECT_POLTERGEIST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectPoltergeist, }, [EFFECT_OCTOLOCK] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectOctolock, }, [EFFECT_CLANGOROUS_SOUL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectClangorousSoul, }, [EFFECT_BOLT_BEAK] = @@ -1688,7 +1687,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SKY_DROP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSkyDrop, .twoTurnEffect = TRUE, .semiInvulnerableEffect = TRUE, }, @@ -1710,49 +1709,49 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_COURT_CHANGE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCourtChange, }, [EFFECT_MAX_HP_50_RECOIL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMaxHp50Recoil, }, [EFFECT_EXTREME_EVOBOOST] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectExtremeEvoboost, }, [EFFECT_HIT_SET_REMOVE_TERRAIN] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectHitSetRemoveTerrain, }, [EFFECT_DARK_VOID] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDarkVoid, }, [EFFECT_VICTORY_DANCE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectVictoryDance, .encourageEncore = TRUE, }, [EFFECT_TEATIME] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTeatime, .encourageEncore = TRUE, }, [EFFECT_ATTACK_UP_USER_ALLY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectAttackUpUserAlly, }, [EFFECT_SHELL_TRAP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShellTrap, }, [EFFECT_PSYBLADE] = @@ -1767,17 +1766,17 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_REVIVAL_BLESSING] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectRevivalBlessing, }, [EFFECT_SNOWSCAPE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSnow, }, [EFFECT_TAKE_HEART] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTakeHeart, }, [EFFECT_COLLISION_COURSE] = @@ -1787,7 +1786,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_CORROSIVE_GAS] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectCorrosiveGas, }, [EFFECT_POPULATION_BOMB] = @@ -1797,22 +1796,22 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SALT_CURE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectSaltCure, }, [EFFECT_CHILLY_RECEPTION] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectChillyReception, }, [EFFECT_MAX_MOVE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectMaxMove, }, [EFFECT_GLAIVE_RUSH] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectGlaiveRush, }, [EFFECT_RAGING_BULL] = @@ -1827,12 +1826,12 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_DOODLE] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectDoodle, }, [EFFECT_FILLET_AWAY] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFilletAway, }, [EFFECT_IVY_CUDGEL] = @@ -1857,13 +1856,13 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_SHED_TAIL] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectShedTail, .encourageEncore = TRUE, }, [EFFECT_UPPER_HAND] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectUpperHand, .encourageEncore = TRUE, }, @@ -1880,7 +1879,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_TIDY_UP] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectTidyUp, .encourageEncore = TRUE, }, };