battle script updates

This commit is contained in:
cawtds 2024-06-17 22:36:41 +02:00
parent 0b0db8c744
commit fddda28ba7
5 changed files with 323 additions and 90 deletions

View File

@ -710,8 +710,9 @@
.byte 0x7c
.endm
.macro setrain
.macro setfieldweather weather:req
.byte 0x7d
.byte \weather
.endm
.macro setreflect
@ -1351,6 +1352,22 @@
.endm
@ callnative macros
.macro savetarget
callnative BS_SaveTarget
.endm
.macro restoretarget
callnative BS_RestoreTarget
.endm
.macro saveattacker
callnative BS_SaveAttacker
.endm
.macro restoreattacker
callnative BS_RestoreAttacker
.endm
.macro metalburstdamagecalculator failInstr:req
callnative BS_CalcMetalBurstDmg
.4byte \failInstr
@ -1411,10 +1428,6 @@
callnative BS_TryRevertWeatherForm
.endm
.macro setsnow
callnative BS_SetSnow
.endm
.macro applysaltcure battler:req
callnative BS_ApplySaltCure
.byte \battler
@ -1628,6 +1641,10 @@
callnative BS_TryUpdateRecoilTracker
.endm
.macro tryupdateleaderscresttracker
callnative BS_TryUpdateLeadersCrestTracker
.endm
.macro trytidyup clear:req, jumpInstr:req
callnative BS_TryTidyUp
.byte \clear
@ -1637,7 +1654,7 @@
.macro trygulpmissile
callnative BS_TryGulpMissile
.endm
.macro tryactivategulpmissile
callnative BS_TryActivateGulpMissile
.endm
@ -1647,6 +1664,14 @@
.4byte \failInstr
.endm
.macro removeweather
callnative BS_RemoveWeather
.endm
.macro applyterastallization
callnative BS_ApplyTerastallization
.endm
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
@ -1769,14 +1794,6 @@
various \battler, VARIOUS_SWITCHIN_ABILITIES
.endm
.macro savetarget
various BS_TARGET, VARIOUS_SAVE_TARGET
.endm
.macro restoretarget
various BS_TARGET, VARIOUS_RESTORE_TARGET
.endm
.macro instanthpdrop battler:req
various \battler, VARIOUS_INSTANT_HP_DROP
.endm
@ -2211,10 +2228,6 @@
.4byte \failInstr
.endm
.macro shellsidearmcheck
various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK
.endm
.macro jumpifteanoberry jumpInstr:req
various BS_ATTACKER, VARIOUS_TEATIME_TARGETS
.4byte \jumpInstr
@ -2282,11 +2295,6 @@
various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES
.endm
.macro jumpifleafguardprotected battler:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED
.4byte \jumpInstr
.endm
@ various remaining from pokefirered
.macro getbattlersforrecall
various BS_ATTACKER, VARIOUS_GET_BATTLERS_FOR_RECALL
@ -2399,10 +2407,6 @@
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
@ -2433,6 +2437,11 @@
goto \jumpInstr
.endm
.macro jumpifleafguardprotected battler:req, jumpInstr:req
various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED
.4byte \jumpInstr
.endm
.macro jumpifsafeguard jumpInstr:req
jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f
jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr

View File

@ -141,6 +141,54 @@ BattleScript_SilphScopeUnveiled::
@ pokeemerald
BattleScript_Terastallization::
@ TODO: no string prints in S/V, but right now this helps with clarity
printstring STRINGID_PKMNSTORINGENERGY
playanimation BS_ATTACKER, B_ANIM_TERA_CHARGE
waitanimation
applyterastallization
playanimation BS_ATTACKER, B_ANIM_TERA_ACTIVATE
waitanimation
printstring STRINGID_PKMNTERASTALLIZEDINTO
waitmessage B_WAIT_TIME_LONG
end3
BattleScript_TeraFormChange::
@ TODO: no string prints in S/V, but right now this helps with clarity
printstring STRINGID_PKMNSTORINGENERGY
handleformchange BS_ATTACKER, 0
handleformchange BS_ATTACKER, 1
playanimation BS_ATTACKER, B_ANIM_TERA_CHARGE
waitanimation
applyterastallization
playanimation BS_ATTACKER, B_ANIM_TERA_ACTIVATE
waitanimation
handleformchange BS_ATTACKER, 2
printstring STRINGID_PKMNTERASTALLIZEDINTO
waitmessage B_WAIT_TIME_LONG
switchinabilities BS_ATTACKER
end3
BattleScript_LowerAtkSpAtk::
jumpifstat BS_EFFECT_BATTLER, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkDoAnim
jumpifstat BS_EFFECT_BATTLER, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkEnd
BattleScript_LowerAtkSpAtkDoAnim::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_EFFECT_BATTLER, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE
setstatchanger STAT_ATK, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkTrySpAtk
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkTrySpAtk
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_LowerAtkSpAtkTrySpAtk::
setstatchanger STAT_SPATK, 1, TRUE
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkEnd
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkEnd
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_LowerAtkSpAtkEnd:
return
BattleScript_EffectSpicyExtract::
attackcanceler
jumpifsubstituteblocks BattleScript_ButItFailed
@ -317,7 +365,7 @@ BattleScript_EffectChillyReception::
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
setfieldweather ENUM_WEATHER_SNOW
call BattleScript_MoveWeatherChangeRet
goto BattleScript_MoveSwitch
BattleScript_EffectChillyReceptionPlayAnimation:
@ -703,12 +751,6 @@ BattleScript_EffectShellTrap::
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
BattleScript_SteelBeamSelfDamage::
dmg_1_2_attackerhp
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
return
BattleScript_EffectCourtChange::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@ -880,10 +922,6 @@ BattleScript_FlingMissed:
ppreduce
goto BattleScript_MoveMissedPause
BattleScript_EffectShellSideArm::
shellsidearmcheck
goto BattleScript_EffectHit
BattleScript_EffectPhotonGeyser::
setphotongeysercategory
goto BattleScript_EffectHit
@ -1816,6 +1854,8 @@ BattleScript_EffectCopycat::
trycopycat BattleScript_CopycatFail
attackanimation
waitanimation
setbyte sB_ANIM_TURN, 0
setbyte sB_ANIM_TARGETS_HIT, 0
jumptocalledmove TRUE
BattleScript_CopycatFail:
ppreduce
@ -1893,6 +1933,7 @@ BattleScript_EffectHitSwitchTarget::
tryfaintmon BS_TARGET
jumpiffainted BS_TARGET, TRUE, BattleScript_MoveEnd
jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut
jumpifability BS_TARGET, ABILITY_GUARD_DOG, BattleScript_MoveEnd
jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted
jumpiftargetdynamaxed BattleScript_HitSwitchTargetDynamaxed
tryhitswitchtarget BattleScript_MoveEnd
@ -2839,12 +2880,11 @@ BattleScript_EffectHealBlock::
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
jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_HitEscapeEnd
jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd
goto BattleScript_MoveSwitch
BattleScript_HitEscapeEnd:
@ -3120,13 +3160,6 @@ BattleScript_MaxHp50Recoil::
tryfaintmon BS_ATTACKER
return
BattleScript_PreserveMissedBitDoMoveAnim:
bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
attackanimation
waitanimation
orhalfword gMoveResultFlags, MOVE_RESULT_MISSED
return
BattleScript_EffectDreamEater::
attackcanceler
jumpifsubstituteblocks BattleScript_DreamEaterNoEffect
@ -3266,6 +3299,7 @@ BattleScript_EffectStatDown:
BattleScript_StatDownFromAttackString:
attackstring
ppreduce
BattleScript_EffectStatDownFromStatBuffChange:
statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StatDownDoAnim
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StatDownEnd
@ -3276,6 +3310,7 @@ BattleScript_StatDownDoAnim::
waitanimation
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
bicword gHitMarker, HITMARKER_DISABLE_ANIMATION
BattleScript_StatDownPrintString::
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
@ -3308,7 +3343,8 @@ BattleScript_MirrorArmorReflectStickyWeb:
call BattleScript_AbilityPopUp
setattackertostickywebuser
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss
goto BattleScript_MirrorArmorReflectStatLoss
call BattleScript_MirrorArmorReflectStatLoss
goto BattleScript_StickyWebOnSwitchInEnd
BattleScript_StatDown::
playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
@ -4389,7 +4425,7 @@ BattleScript_EffectSandstorm::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
setsandstorm
setfieldweather ENUM_WEATHER_SANDSTORM
goto BattleScript_MoveWeatherChange
BattleScript_EffectRollout::
@ -4554,7 +4590,7 @@ BattleScript_EffectRainDance::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
setrain
setfieldweather ENUM_WEATHER_RAIN
BattleScript_MoveWeatherChange::
attackanimation
waitanimation
@ -4572,7 +4608,7 @@ BattleScript_EffectSunnyDay::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
setsunny
setfieldweather ENUM_WEATHER_SUN
goto BattleScript_MoveWeatherChange
BattleScript_ExtremelyHarshSunlightWasNotLessened:
@ -4930,7 +4966,7 @@ BattleScript_EffectHail::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
sethail
setfieldweather ENUM_WEATHER_HAIL
goto BattleScript_MoveWeatherChange
BattleScript_EffectTorment::
@ -5553,6 +5589,7 @@ BattleScript_FaintAttacker::
BattleScript_FaintTarget::
tryillusionoff BS_TARGET
tryactivategulpmissile
tryupdateleaderscresttracker
playfaintcry BS_TARGET
pause B_WAIT_TIME_LONG
dofaintanimation BS_TARGET
@ -5715,7 +5752,7 @@ BattleScript_PrintFullBox::
BattleScript_ActionSwitch::
hpthresholds2 BS_ATTACKER
copybyte sSAVED_BATTLER, gBattlerAttacker
saveattacker
printstring STRINGID_RETURNMON
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit
setmultihit 1
@ -5733,7 +5770,7 @@ BattleScript_DoSwitchOut::
switchoutabilities BS_ATTACKER
updatedynamax
waitstate
copybyte gBattlerAttacker, sSAVED_BATTLER
restoreattacker
returnatktoball
waitstate
drawpartystatussummary BS_ATTACKER
@ -5881,6 +5918,23 @@ BattleScript_SunlightFaded::
call BattleScript_ActivateWeatherAbilities
end2
BattleScript_FogContinues::
printstring STRINGID_FOGISDEEP
waitmessage B_WAIT_TIME_LONG
playanimation BS_ATTACKER, B_ANIM_FOG_CONTINUES
call BattleScript_ActivateWeatherAbilities
end2
BattleScript_FogEnded_Ret::
printstring STRINGID_FOGLIFTED
waitmessage B_WAIT_TIME_LONG
call BattleScript_ActivateWeatherAbilities
return
BattleScript_FogEnded::
call BattleScript_FogEnded_Ret
end2
BattleScript_OverworldStatusStarts::
printfromtable gStartingStatusStringIds
waitmessage B_WAIT_TIME_LONG
@ -6261,6 +6315,7 @@ BattleScript_ToxicSpikesPoisoned::
BattleScript_StickyWebOnSwitchIn::
savetarget
saveattacker
copybyte gBattlerTarget, sBATTLER
setbyte sSTICKY_WEB_STAT_DROP, 1
printstring STRINGID_STICKYWEBSWITCHIN
@ -6279,6 +6334,7 @@ BattleScript_StickyWebOnSwitchInPrintStatMsg:
waitmessage B_WAIT_TIME_LONG
BattleScript_StickyWebOnSwitchInEnd:
restoretarget
restoreattacker
return
BattleScript_PerishSongTakesLife::
@ -6326,7 +6382,7 @@ BattleScript_GulpMissileNoSecondEffectGorging:
BattleScript_GulpMissileGulping::
call BattleScript_AbilityPopUp
playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE
playanimation BS_ATTACKER, B_ANIM_GULP_MISSILE
waitanimation
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
effectivenesssound
@ -6727,7 +6783,7 @@ BattleScript_TurnHeal:
end2
BattleScript_AquaRingHeal::
playanimation BS_ATTACKER, B_ANIM_AQUA_RING_HEAL
playanimation BS_ATTACKER, B_ANIM_AQUA_RING_HEAL
printstring STRINGID_AQUARINGHEAL
goto BattleScript_TurnHeal
@ -6872,17 +6928,6 @@ BattleScript_OneHitKOMsg::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_SAtkDown2::
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 | 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
@ -6979,6 +7024,29 @@ BattleScript_AttackerFormChangeEnd3NoPopup::
call BattleScript_AttackerFormChangeNoPopup
end3
BattleScript_AttackerFormChangeWithString::
pause 5
copybyte gBattlerAbility, gBattlerAttacker
call BattleScript_AbilityPopUp
flushtextbox
BattleScript_AttackerFormChangeWithStringNoPopup::
handleformchange BS_ATTACKER, 0
handleformchange BS_ATTACKER, 1
playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE
waitanimation
handleformchange BS_ATTACKER, 2
printstring STRINGID_PKMNTRANSFORMED
waitmessage B_WAIT_TIME_LONG
return
BattleScript_AttackerFormChangeWithStringEnd3::
call BattleScript_AttackerFormChangeWithString
end3
BattleScript_AttackerFormChangeWithStringEnd3NoPopup::
call BattleScript_AttackerFormChangeWithStringNoPopup
end3
BattleScript_AttackerFormChangeMoveEffect::
waitmessage 1
handleformchange BS_ATTACKER, 0
@ -7731,7 +7799,7 @@ BattleScript_TryIntimidateHoldEffectsRet:
return
BattleScript_IntimidateActivates::
copybyte sSAVED_BATTLER, gBattlerTarget
savetarget
.if B_ABILITY_POP_UP == TRUE
showabilitypopup BS_ATTACKER
pause B_WAIT_TIME_LONG
@ -7769,7 +7837,7 @@ BattleScript_IntimidateLoopIncrement:
BattleScript_IntimidateEnd:
copybyte sBATTLER, gBattlerAttacker
destroyabilitypopup
copybyte gBattlerTarget, sSAVED_BATTLER
restoretarget
pause B_WAIT_TIME_MED
end3
@ -7802,7 +7870,7 @@ BattleScript_IntimidateInReverse:
goto BattleScript_IntimidateLoopIncrement
BattleScript_SupersweetSyrupActivates::
copybyte sSAVED_BATTLER, gBattlerTarget
savetarget
.if B_ABILITY_POP_UP == TRUE
showabilitypopup BS_ATTACKER
pause B_WAIT_TIME_LONG
@ -7835,7 +7903,7 @@ BattleScript_SupersweetSyrupLoopIncrement:
BattleScript_SupersweetSyrupEnd:
copybyte sBATTLER, gBattlerAttacker
destroyabilitypopup
copybyte gBattlerTarget, sSAVED_BATTLER
restoretarget
pause B_WAIT_TIME_MED
end3
@ -8147,7 +8215,6 @@ BattleScript_FlashFireBoost::
call BattleScript_AbilityPopUp
printfromtable gFlashFireStringIds
waitmessage B_WAIT_TIME_LONG
tryfaintmon BS_ATTACKER
goto BattleScript_MoveEnd
BattleScript_AbilityPreventsPhasingOut::
@ -8287,6 +8354,13 @@ BattleScript_ProteanActivates::
waitmessage B_WAIT_TIME_LONG
return
BattleScript_TeraShellDistortingTypeMatchups::
pause B_WAIT_TIME_SHORTEST
call BattleScript_AbilityPopUp
printstring STRINGID_PKMNMADESHELLGLEAM
waitmessage B_WAIT_TIME_LONG
return
BattleScript_CursedBodyActivates::
call BattleScript_AbilityPopUp
printstring STRINGID_CUSEDBODYDISABLED
@ -8353,7 +8427,7 @@ BattleScript_ScriptingAbilityStatRaise::
call BattleScript_AbilityPopUp
copybyte sSAVED_DMG, gBattlerAttacker
copybyte gBattlerAttacker, sBATTLER
statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL
setgraphicalstatchangevalues
playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
waitanimation
@ -8471,7 +8545,10 @@ BattleScript_FriskMsg::
return
BattleScript_FriskActivates::
tryfriskmsg BS_ATTACKER
saveattacker
copybyte gBattlerAttacker, sBATTLER
tryfriskmsg BS_SCRIPTING
restoreattacker
end3
BattleScript_ImposterActivates::
@ -8624,6 +8701,11 @@ BattleScript_IgnoresAndUsesRandomMove::
BattleScript_MoveUsedLoafingAround::
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_LOAFING, BattleScript_MoveUsedLoafingAroundMsg
@ Skip ahead if not the Battle Palace message
jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER, BattleScript_MoveUsedLoafingAroundMsg
setbyte gBattleCommunication, 0
palacetryescapestatus BS_ATTACKER
setbyte cMULTISTRING_CHOOSER, B_MSG_INCAPABLE_OF_POWER
BattleScript_MoveUsedLoafingAroundMsg::
printfromtable gInobedientStringIds
waitmessage B_WAIT_TIME_LONG
@ -9074,6 +9156,25 @@ BattleScript_AnnounceAirLockCloudNine::
call BattleScript_ActivateWeatherAbilities
end3
BattleScript_ActivateTeraformZero::
call BattleScript_AbilityPopUp
waitmessage B_WAIT_TIME_LONG
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_ANY, BattleScript_ActivateTeraformZero_RemoveWeather
jumpifhalfword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZero_RemoveTerrain
goto BattleScript_ActivateTeraformZero_End
BattleScript_ActivateTeraformZero_RemoveWeather:
removeweather
printfromtable gWeatherEndsStringIds
waitmessage B_WAIT_TIME_LONG
jumpifhalfword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZero_End
BattleScript_ActivateTeraformZero_RemoveTerrain:
removeterrain
playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
printfromtable gTerrainStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_ActivateTeraformZero_End:
end3
BattleScript_QuickClawActivation::
flushtextbox
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
@ -9327,19 +9428,19 @@ BattleScript_RedCardIngrain:
printstring STRINGID_PKMNANCHOREDITSELF
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
swapattackerwithtarget
restoretarget
return
BattleScript_RedCardSuctionCups:
printstring STRINGID_PKMNANCHORSITSELFWITH
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
swapattackerwithtarget
restoretarget
return
BattleScript_RedCardDynamaxed:
printstring STRINGID_MOVEBLOCKEDBYDYNAMAX
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
swapattackerwithtarget
restoretarget
return
BattleScript_EjectButtonActivates::
@ -9804,10 +9905,20 @@ BattleScript_BerserkGeneRet_End:
removeitem BS_SCRIPTING
end3
BattleScript_BoosterEnergyEnd2::
playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1
call BattleScript_AbilityPopUp
printstring STRINGID_BOOSTERENERGYACTIVATES
waitmessage B_WAIT_TIME_MED
printstring STRINGID_STATWASHEIGHTENED
waitmessage B_WAIT_TIME_MED
removeitem BS_SCRIPTING
end2
BattleScript_EffectSnow::
attackcanceler
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
setsnow
setfieldweather ENUM_WEATHER_SNOW
goto BattleScript_MoveWeatherChange

View File

@ -1330,8 +1330,14 @@
#define STRINGID_TRAINER1MON1COMEBACK 731
#define STRINGID_TRAINER1MON2COMEBACK 732
#define STRINGID_TRAINER1MON1AND2COMEBACK 733
#define STRINGID_PKMNTERASTALLIZEDINTO 734
#define STRINGID_BOOSTERENERGYACTIVATES 735
#define STRINGID_FOGCREPTUP 736
#define STRINGID_FOGISDEEP 737
#define STRINGID_FOGLIFTED 738
#define STRINGID_PKMNMADESHELLGLEAM 739
#define BATTLESTRINGS_COUNT 734
#define BATTLESTRINGS_COUNT 740
// This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,
@ -1393,6 +1399,17 @@
#define B_MSG_STARTED_SUNLIGHT 4
#define B_MSG_STARTED_HAIL 5
#define B_MSG_STARTED_SNOW 6
#define B_MSG_STARTED_FOG 7
// gWeatherEndsStringIds
#define B_MSG_WEATHER_END_RAIN 0
#define B_MSG_WEATHER_END_SANDSTORM 1
#define B_MSG_WEATHER_END_SUN 2
#define B_MSG_WEATHER_END_HAIL 3
#define B_MSG_WEATHER_END_STRONG_WINDS 4
#define B_MSG_WEATHER_END_SNOW 5
#define B_MSG_WEATHER_END_FOG 6
#define B_MSG_WEATHER_END_COUNT 7
// gRainContinuesStringIds
#define B_MSG_RAIN_CONTINUES 0
@ -1498,7 +1515,10 @@
#define B_MSG_WONT_OBEY 1
#define B_MSG_TURNED_AWAY 2
#define B_MSG_PRETEND_NOT_NOTICE 3
#define NUM_LOAF_STRINGS 4 // For randomly selecting a disobey string
#define B_MSG_INCAPABLE_OF_POWER 4
// For randomly selecting a disobey string
// Skips the one used for Battle Palace
#define NUM_LOAF_STRINGS 4
// gSafariGetNearStringIds
#define B_MSG_CREPT_CLOSER 0

View File

@ -353,6 +353,9 @@ static const u8 sText_HailStopped[] = _("The hail stopped.");
static const u8 sText_StartedSnow[] = _("It started to snow!");
static const u8 sText_SnowContinues[] = _("Snow continues to fall.");
static const u8 sText_SnowStopped[] = _("The snow stopped.");
static const u8 sText_FogCreptUp[] = _("Fog crept up as thick as soup!");
static const u8 sText_FogIsDeep[] = _("The fog is deep…");
static const u8 sText_FogLifted[] = _("The fog lifted.");
static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!");
static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!");
static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
@ -668,6 +671,7 @@ static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!");
static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!");
static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!");
static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!");
static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam!\nIt's distorting type matchups!");
static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!");
static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_BUFF1}!");
static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!");
@ -738,6 +742,7 @@ static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PRE
static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX} with power!");
static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!");
static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!");
static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its Booster Energy\nto activate {B_SCR_ACTIVE_ABILITY}!");
static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!");
static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p");
static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!");
@ -962,6 +967,7 @@ const u8 gText_Unused_5F[] = _("5F");
const u8 gText_Unused_6F[] = _("6F");
const u8 gText_Unused_7F[] = _("7F");
const u8 gText_Unused_8F[] = _("8F");
static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!");
const u8 gText_TODO[] = _("TODO");
@ -987,6 +993,7 @@ const u8 *const gPokeblockWasTooXStringTable[] = {
};
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_START] = {
[STRINGID_PKMNTERASTALLIZEDINTO - BATTLESTRINGS_TABLE_START] = sText_PkmnTerastallizedInto,
[STRINGID_TIDYINGUPCOMPLETE - BATTLESTRINGS_TABLE_START] = sText_TidyingUpComplete,
[STRINGID_SUPERSWEETAROMAWAFTS - BATTLESTRINGS_TABLE_START] = sText_SupersweetAromaWafts,
[STRINGID_SHEDITSTAIL - BATTLESTRINGS_TABLE_START] = sText_ShedItsTail,
@ -1032,6 +1039,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_ST
[STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat,
[STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility,
[STRINGID_STATWASHEIGHTENED - BATTLESTRINGS_TABLE_START] = sText_StatWasHeightened,
[STRINGID_BOOSTERENERGYACTIVATES - BATTLESTRINGS_TABLE_START] = sText_BoosterEnergyActivates,
[STRINGID_SUNLIGHTACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_SunlightActivatedAbility,
[STRINGID_BEINGHITCHARGEDPKMNWITHPOWER - BATTLESTRINGS_TABLE_START] = sText_BeingHitChargedPkmnWithPower,
[STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget,
@ -1097,6 +1105,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_ST
[STRINGID_CANACTFASTERTHANKSTO - BATTLESTRINGS_TABLE_START] = sText_CanActFaster,
[STRINGID_CURIOUSMEDICINEENTERS - BATTLESTRINGS_TABLE_START] = sText_CuriousMedicineEnters,
[STRINGID_ASONEENTERS - BATTLESTRINGS_TABLE_START] = sText_AsOneEnters,
[STRINGID_PKMNMADESHELLGLEAM - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeShellGleam,
[STRINGID_ABILITYRAISEDSTATDRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_AbilityRaisedStatDrastically,
[STRINGID_PKMNSWILLPERISHIN3TURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsWillPerishIn3Turns,
[STRINGID_ASANDSTORMKICKEDUP - BATTLESTRINGS_TABLE_START] = sText_ASandstormKickedUp,
@ -1368,6 +1377,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_ST
[STRINGID_STARTEDSNOW - BATTLESTRINGS_TABLE_START] = sText_StartedSnow,
[STRINGID_SNOWCONTINUES -BATTLESTRINGS_TABLE_START] = sText_SnowContinues,
[STRINGID_SNOWSTOPPED - BATTLESTRINGS_TABLE_START] = sText_SnowStopped,
[STRINGID_FOGCREPTUP - BATTLESTRINGS_TABLE_START] = sText_FogCreptUp,
[STRINGID_FOGISDEEP - BATTLESTRINGS_TABLE_START] = sText_FogIsDeep,
[STRINGID_FOGLIFTED - BATTLESTRINGS_TABLE_START] = sText_FogLifted,
[STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp,
[STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow,
[STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave,
@ -1835,6 +1847,18 @@ const u16 gMoveWeatherChangeStringIds[] =
[B_MSG_STARTED_SUNLIGHT] = STRINGID_SUNLIGHTGOTBRIGHT,
[B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL,
[B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW,
[B_MSG_STARTED_FOG] = STRINGID_FOGCREPTUP, // Unused, can use for custom moves that set fog
};
const u16 gWeatherEndsStringIds[B_MSG_WEATHER_END_COUNT] =
{
[B_MSG_WEATHER_END_RAIN] = STRINGID_RAINSTOPPED,
[B_MSG_WEATHER_END_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED,
[B_MSG_WEATHER_END_SUN] = STRINGID_SUNLIGHTFADED,
[B_MSG_WEATHER_END_HAIL] = STRINGID_HAILSTOPPED,
[B_MSG_WEATHER_END_STRONG_WINDS] = STRINGID_STRONGWINDSDISSIPATED,
[B_MSG_WEATHER_END_SNOW] = STRINGID_SNOWSTOPPED,
[B_MSG_WEATHER_END_FOG] = STRINGID_FOGLIFTED,
};
const u16 gSandStormHailSnowContinuesStringIds[] =
@ -2099,12 +2123,12 @@ const u16 gWeatherStartsStringIds[] =
[WEATHER_SUNNY_CLOUDS] = STRINGID_ITISRAINING,
[WEATHER_SUNNY] = STRINGID_ITISRAINING,
[WEATHER_RAIN] = STRINGID_ITISRAINING,
[WEATHER_SNOW] = STRINGID_ITISRAINING,
[WEATHER_SNOW] = (B_OVERWORLD_SNOW >= GEN_9 ? STRINGID_STARTEDSNOW : STRINGID_STARTEDHAIL),
[WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING,
[WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING,
[WEATHER_FOG_HORIZONTAL] = STRINGID_FOGISDEEP,
[WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING,
[WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING,
[WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING,
[WEATHER_FOG_DIAGONAL] = STRINGID_FOGISDEEP,
[WEATHER_UNDERWATER] = STRINGID_ITISRAINING,
[WEATHER_SHADE] = STRINGID_ITISRAINING,
[WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG,
@ -2124,7 +2148,8 @@ const u16 gInobedientStringIds[] =
[B_MSG_LOAFING] = STRINGID_PKMNLOAFING,
[B_MSG_WONT_OBEY] = STRINGID_PKMNWONTOBEY,
[B_MSG_TURNED_AWAY] = STRINGID_PKMNTURNEDAWAY,
[B_MSG_PRETEND_NOT_NOTICE] = STRINGID_PKMNPRETENDNOTNOTICE
[B_MSG_PRETEND_NOT_NOTICE] = STRINGID_PKMNPRETENDNOTNOTICE,
[B_MSG_INCAPABLE_OF_POWER] = STRINGID_PKMNINCAPABLEOFPOWER
};
const u16 gSafariReactionStringIds[NUM_SAFARI_REACTIONS] =

View File

@ -340,6 +340,8 @@ static bool8 IsFinalStrikeEffect(u16 move);
static void TryUpdateRoundTurnOrder(void);
static void BestowItem(u32 battlerAtk, u32 battlerDef);
static void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler);
static void RemoveAllWeather(void);
static void RemoveAllTerrains(void);
static bool8 CanBurnHitThaw(u16 move);
static bool32 ChangeOrderTargetAfterAttacker(void);
static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove);
@ -473,7 +475,7 @@ static void Cmd_setatkhptozero(void);
static void Cmd_jumpifnexttargetvalid(void);
static void Cmd_tryhealhalfhealth(void);
static void Cmd_trymirrormove(void);
static void Cmd_setrain(void);
static void Cmd_setfieldweather(void);
static void Cmd_setreflect(void);
static void Cmd_setseeded(void);
static void Cmd_manipulatedamage(void);
@ -732,7 +734,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_jumpifnexttargetvalid, //0x7A // done
Cmd_tryhealhalfhealth, //0x7B // done
Cmd_trymirrormove, //0x7C // done
Cmd_setrain, //0x7D // done
Cmd_setfieldweather, //0x7D // done
Cmd_setreflect, //0x7E // done
Cmd_setseeded, //0x7F // done
Cmd_manipulatedamage, //0x80 // done
@ -8466,6 +8468,30 @@ bool32 CanUseLastResort(u8 battler)
return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1);
}
static void RemoveAllWeather(void)
{
gWishFutureKnock.weatherDuration = 0;
if (gBattleWeather & B_WEATHER_RAIN)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_RAIN;
else if(gBattleWeather & B_WEATHER_SANDSTORM)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SANDSTORM;
else if(gBattleWeather & B_WEATHER_SUN)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SUN;
else if(gBattleWeather & B_WEATHER_HAIL)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_HAIL;
else if(gBattleWeather & B_WEATHER_STRONG_WINDS)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_STRONG_WINDS;
else if(gBattleWeather & B_WEATHER_SNOW)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SNOW;
else if(gBattleWeather & B_WEATHER_FOG)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_FOG;
else
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_COUNT; // failsafe
gBattleWeather = 0; // remove the weather
}
static void RemoveAllTerrains(void)
{
gFieldTimers.terrainTimer = 0;
@ -11072,19 +11098,39 @@ static void Cmd_trymirrormove(void)
}
}
static void Cmd_setrain(void)
static void Cmd_setfieldweather(void)
{
CMD_ARGS();
CMD_ARGS(u8 weather);
if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE))
u8 weather = cmd->weather;
if (!TryChangeBattleWeather(gBattlerAttacker, weather, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
gBattlescriptCurrInstr = cmd->nextInstr;
return;
}
else
switch (weather)
{
case ENUM_WEATHER_RAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN;
break;
case ENUM_WEATHER_SUN:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT;
break;
case ENUM_WEATHER_SANDSTORM:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM;
break;
case ENUM_WEATHER_HAIL:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL;
break;
case ENUM_WEATHER_SNOW:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW;
break;
}
gBattlescriptCurrInstr = cmd->nextInstr;
}
@ -16916,6 +16962,13 @@ void BS_TryUpdateRecoilTracker(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_TryUpdateLeadersCrestTracker(void)
{
NATIVE_ARGS();
TryUpdateEvolutionTracker(EVO_DEFEAT_WITH_ITEM, 1, MOVE_NONE);
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_TryTidyUp(void)
{
NATIVE_ARGS(u8 clear, const u8 *jumpInstr);
@ -17016,3 +17069,18 @@ void BS_TryQuash(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_RemoveWeather(void)
{
NATIVE_ARGS();
RemoveAllWeather();
gBattlescriptCurrInstr = cmd->nextInstr;
}
void BS_ApplyTerastallization(void)
{
NATIVE_ARGS();
// TODO: Tera
// ApplyBattlerVisualsForTeraAnim(gBattlerAttacker);
gBattlescriptCurrInstr = cmd->nextInstr;
}