mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-02-04 18:30:07 +01:00
merge with be
This commit is contained in:
commit
ce455ac7e7
@ -1821,6 +1821,10 @@
|
|||||||
various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
|
various BS_ATTACKER, VARIOUS_REMOVE_TERRAIN
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro trytoclearprimalweather
|
||||||
|
various BS_ATTACKER, VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER
|
||||||
|
.endm
|
||||||
|
|
||||||
@ helpful macros
|
@ helpful macros
|
||||||
.macro setstatchanger stat:req, stages:req, down:req
|
.macro setstatchanger stat:req, stages:req, down:req
|
||||||
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
setbyte sSTATCHANGER \stat | \stages << 3 | \down << 7
|
||||||
|
@ -823,6 +823,7 @@ gBattleAnims_General::
|
|||||||
.4byte General_RestoreBg @ B_ANIM_RESTORE_BG
|
.4byte General_RestoreBg @ B_ANIM_RESTORE_BG
|
||||||
.4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE
|
.4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE
|
||||||
.4byte General_GulpMissile @ B_ANIM_GULP_MISSILE
|
.4byte General_GulpMissile @ B_ANIM_GULP_MISSILE
|
||||||
|
.4byte General_StrongWinds @ B_ANIM_STRONG_WINDS
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gBattleAnims_Special::
|
gBattleAnims_Special::
|
||||||
@ -24412,6 +24413,17 @@ General_GulpMissile: @ Tackle anim (placeholder)
|
|||||||
blendoff
|
blendoff
|
||||||
end
|
end
|
||||||
|
|
||||||
|
General_StrongWinds::
|
||||||
|
loadspritegfx ANIM_TAG_FLYING_DIRT
|
||||||
|
playsewithpan SE_M_GUST, 0
|
||||||
|
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 12, 12, RGB(20, 20, 20)
|
||||||
|
waitforvisualfinish
|
||||||
|
createvisualtask AnimTask_LoadWindstormBackground, 5, FALSE
|
||||||
|
delay 32
|
||||||
|
waitforvisualfinish
|
||||||
|
stopsound
|
||||||
|
end
|
||||||
|
|
||||||
RainbowEndureEffect:
|
RainbowEndureEffect:
|
||||||
launchtemplate gBlueEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
|
launchtemplate gBlueEndureEnergySpriteTemplate 0x2 0x4 0x0 0xffe8 0x1a 0x2
|
||||||
delay 0x3
|
delay 0x3
|
||||||
|
@ -646,6 +646,9 @@ BattleScript_MoveEffectCoreEnforcer::
|
|||||||
setgastroacid BattleScript_CoreEnforcerRet
|
setgastroacid BattleScript_CoreEnforcerRet
|
||||||
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
BattleScript_CoreEnforcerRet:
|
BattleScript_CoreEnforcerRet:
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -738,6 +741,9 @@ BattleScript_EffectPartingShotSwitch:
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
switchinanim BS_ATTACKER, TRUE
|
switchinanim BS_ATTACKER, TRUE
|
||||||
waitstate
|
waitstate
|
||||||
@ -1743,6 +1749,9 @@ BattleScript_EffectSimpleBeam:
|
|||||||
waitanimation
|
waitanimation
|
||||||
printstring STRINGID_PKMNACQUIREDSIMPLE
|
printstring STRINGID_PKMNACQUIREDSIMPLE
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectSuckerPunch:
|
BattleScript_EffectSuckerPunch:
|
||||||
@ -1791,6 +1800,9 @@ BattleScript_EffectHealingWish:
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
switchinanim BS_ATTACKER, TRUE
|
switchinanim BS_ATTACKER, TRUE
|
||||||
waitstate
|
waitstate
|
||||||
@ -1828,6 +1840,9 @@ BattleScript_EffectWorrySeed:
|
|||||||
waitanimation
|
waitanimation
|
||||||
printstring STRINGID_PKMNACQUIREDABILITY
|
printstring STRINGID_PKMNACQUIREDABILITY
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectPowerSplit:
|
BattleScript_EffectPowerSplit:
|
||||||
@ -1956,6 +1971,9 @@ BattleScript_EffectGastroAcid:
|
|||||||
waitanimation
|
waitanimation
|
||||||
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
printstring STRINGID_PKMNSABILITYSUPPRESSED
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
goto BattleScript_MoveEnd
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
BattleScript_EffectToxicSpikes:
|
BattleScript_EffectToxicSpikes:
|
||||||
@ -2150,6 +2168,9 @@ BattleScript_EffectHitEscape:
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
switchinanim BS_ATTACKER, TRUE
|
switchinanim BS_ATTACKER, TRUE
|
||||||
waitstate
|
waitstate
|
||||||
@ -3088,6 +3109,9 @@ BattleScript_EffectTransform::
|
|||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
transformdataexecution
|
transformdataexecution
|
||||||
attackanimation
|
attackanimation
|
||||||
waitanimation
|
waitanimation
|
||||||
@ -3892,6 +3916,9 @@ BattleScript_EffectSandstorm::
|
|||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
|
||||||
setsandstorm
|
setsandstorm
|
||||||
goto BattleScript_MoveWeatherChange
|
goto BattleScript_MoveWeatherChange
|
||||||
|
|
||||||
@ -4025,6 +4052,9 @@ BattleScript_EffectBatonPass::
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
switchinanim BS_ATTACKER, TRUE
|
switchinanim BS_ATTACKER, TRUE
|
||||||
waitstate
|
waitstate
|
||||||
@ -4094,6 +4124,9 @@ BattleScript_EffectRainDance::
|
|||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
|
||||||
setrain
|
setrain
|
||||||
BattleScript_MoveWeatherChange::
|
BattleScript_MoveWeatherChange::
|
||||||
attackanimation
|
attackanimation
|
||||||
@ -4107,9 +4140,80 @@ BattleScript_EffectSunnyDay::
|
|||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
|
||||||
setsunny
|
setsunny
|
||||||
goto BattleScript_MoveWeatherChange
|
goto BattleScript_MoveWeatherChange
|
||||||
|
|
||||||
|
BattleScript_ExtremelyHarshSunlightWasNotLessened:
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
|
BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3:
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
printstring STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
end3
|
||||||
|
|
||||||
|
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, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedEnd3
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainEnd3
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnEnd3
|
||||||
|
end3
|
||||||
|
|
||||||
|
BattleScript_BlockedByPrimalWeatherRet::
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessenedRet
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRainRet
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOnRet
|
||||||
|
return
|
||||||
|
|
||||||
BattleScript_EffectDefenseUpHit::
|
BattleScript_EffectDefenseUpHit::
|
||||||
setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
setmoveeffect MOVE_EFFECT_DEF_PLUS_1 | MOVE_EFFECT_AFFECTS_USER
|
||||||
goto BattleScript_EffectHit
|
goto BattleScript_EffectHit
|
||||||
@ -4467,6 +4571,9 @@ BattleScript_EffectHail::
|
|||||||
attackcanceler
|
attackcanceler
|
||||||
attackstring
|
attackstring
|
||||||
ppreduce
|
ppreduce
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_SUN_PRIMAL, BattleScript_ExtremelyHarshSunlightWasNotLessened
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_RAIN_PRIMAL, BattleScript_NoReliefFromHeavyRain
|
||||||
|
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, WEATHER_STRONG_WINDS, BattleScript_MysteriousAirCurrentBlowsOn
|
||||||
sethail
|
sethail
|
||||||
goto BattleScript_MoveWeatherChange
|
goto BattleScript_MoveWeatherChange
|
||||||
|
|
||||||
@ -5233,6 +5340,9 @@ BattleScript_FaintedMonTryChooseAnother:
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
hidepartystatussummary BS_ATTACKER
|
hidepartystatussummary BS_ATTACKER
|
||||||
switchinanim BS_ATTACKER, 0
|
switchinanim BS_ATTACKER, 0
|
||||||
@ -5243,6 +5353,9 @@ BattleScript_FaintedMonChooseAnother:
|
|||||||
getswitchedmondata BS_FAINTED
|
getswitchedmondata BS_FAINTED
|
||||||
switchindataupdate BS_FAINTED
|
switchindataupdate BS_FAINTED
|
||||||
hpthresholds BS_FAINTED
|
hpthresholds BS_FAINTED
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
hidepartystatussummary BS_FAINTED
|
hidepartystatussummary BS_FAINTED
|
||||||
switchinanim BS_FAINTED, FALSE
|
switchinanim BS_FAINTED, FALSE
|
||||||
@ -5275,6 +5388,9 @@ BattleScript_HandleFaintedMonLoop::
|
|||||||
getswitchedmondata BS_FAINTED
|
getswitchedmondata BS_FAINTED
|
||||||
switchindataupdate BS_FAINTED
|
switchindataupdate BS_FAINTED
|
||||||
hpthresholds BS_FAINTED
|
hpthresholds BS_FAINTED
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
hidepartystatussummary BS_FAINTED
|
hidepartystatussummary BS_FAINTED
|
||||||
switchinanim BS_FAINTED, FALSE
|
switchinanim BS_FAINTED, FALSE
|
||||||
@ -5477,6 +5593,9 @@ BattleScript_DoSwitchOut::
|
|||||||
getswitchedmondata BS_ATTACKER
|
getswitchedmondata BS_ATTACKER
|
||||||
switchindataupdate BS_ATTACKER
|
switchindataupdate BS_ATTACKER
|
||||||
hpthresholds BS_ATTACKER
|
hpthresholds BS_ATTACKER
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring STRINGID_SWITCHINMON
|
printstring STRINGID_SWITCHINMON
|
||||||
hidepartystatussummary BS_ATTACKER
|
hidepartystatussummary BS_ATTACKER
|
||||||
switchinanim BS_ATTACKER, FALSE
|
switchinanim BS_ATTACKER, FALSE
|
||||||
@ -5778,6 +5897,9 @@ BattleScript_RoarSuccessSwitch::
|
|||||||
call BattleScript_RoarSuccessRet
|
call BattleScript_RoarSuccessRet
|
||||||
getswitchedmondata BS_TARGET
|
getswitchedmondata BS_TARGET
|
||||||
switchindataupdate BS_TARGET
|
switchindataupdate BS_TARGET
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
switchinanim BS_TARGET, FALSE
|
switchinanim BS_TARGET, FALSE
|
||||||
waitstate
|
waitstate
|
||||||
printstring STRINGID_PKMNWASDRAGGEDOUT
|
printstring STRINGID_PKMNWASDRAGGEDOUT
|
||||||
@ -7219,6 +7341,56 @@ BattleScript_DroughtActivates::
|
|||||||
call BattleScript_WeatherFormChanges
|
call BattleScript_WeatherFormChanges
|
||||||
end3
|
end3
|
||||||
|
|
||||||
|
BattleScript_DesolateLandActivates::
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_EXTREMELYHARSHSUNLIGHT
|
||||||
|
waitstate
|
||||||
|
playanimation BS_BATTLER_0, B_ANIM_SUN_CONTINUES, NULL
|
||||||
|
call BattleScript_WeatherFormChanges
|
||||||
|
end3
|
||||||
|
|
||||||
|
BattleScript_DesolateLandEvaporatesWaterTypeMoves::
|
||||||
|
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||||
|
attackstring
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
ppreduce
|
||||||
|
printstring STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT
|
||||||
|
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, NULL
|
||||||
|
call BattleScript_WeatherFormChanges
|
||||||
|
end3
|
||||||
|
|
||||||
|
BattleScript_PrimordialSeaFizzlesOutFireTypeMoves::
|
||||||
|
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
|
||||||
|
attackstring
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
ppreduce
|
||||||
|
printstring STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
goto BattleScript_MoveEnd
|
||||||
|
|
||||||
|
BattleScript_DeltaStreamActivates::
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
call BattleScript_AbilityPopUp
|
||||||
|
printstring STRINGID_MYSTERIOUSAIRCURRENT
|
||||||
|
waitstate
|
||||||
|
playanimation BS_ATTACKER, B_ANIM_STRONG_WINDS, NULL
|
||||||
|
end3
|
||||||
|
|
||||||
|
BattleScript_AttackWeakenedByStrongWinds::
|
||||||
|
pause B_WAIT_TIME_SHORT
|
||||||
|
printstring STRINGID_ATTACKWEAKENEDBSTRONGWINDS
|
||||||
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
return
|
||||||
|
|
||||||
BattleScript_SnowWarningActivates::
|
BattleScript_SnowWarningActivates::
|
||||||
pause B_WAIT_TIME_SHORT
|
pause B_WAIT_TIME_SHORT
|
||||||
call BattleScript_AbilityPopUp
|
call BattleScript_AbilityPopUp
|
||||||
@ -8401,6 +8573,9 @@ BattleScript_EjectButtonActivates::
|
|||||||
getswitchedmondata BS_SCRIPTING
|
getswitchedmondata BS_SCRIPTING
|
||||||
switchindataupdate BS_SCRIPTING
|
switchindataupdate BS_SCRIPTING
|
||||||
hpthresholds BS_SCRIPTING
|
hpthresholds BS_SCRIPTING
|
||||||
|
trytoclearprimalweather
|
||||||
|
printstring STRINGID_EMPTYSTRING3
|
||||||
|
waitmessage 1
|
||||||
printstring 0x3
|
printstring 0x3
|
||||||
switchinanim BS_SCRIPTING 0x1
|
switchinanim BS_SCRIPTING 0x1
|
||||||
waitstate
|
waitstate
|
||||||
|
BIN
graphics/battle_anims/backgrounds/windstorm_brew.png
Normal file
BIN
graphics/battle_anims/backgrounds/windstorm_brew.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
@ -389,6 +389,15 @@ extern const u8 BattleScript_DarkTypePreventsPrankster[];
|
|||||||
extern const u8 BattleScript_GulpMissileGorging[];
|
extern const u8 BattleScript_GulpMissileGorging[];
|
||||||
extern const u8 BattleScript_GulpMissileGulping[];
|
extern const u8 BattleScript_GulpMissileGulping[];
|
||||||
extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[];
|
extern const u8 BattleScript_BattleBondActivatesOnMoveEndAttacker[];
|
||||||
|
extern const u8 BattleScript_DesolateLandActivates[];
|
||||||
|
extern const u8 BattleScript_DesolateLandEvaporatesWaterTypeMoves[];
|
||||||
|
extern const u8 BattleScript_PrimordialSeaActivates[];
|
||||||
|
extern const u8 BattleScript_PrimordialSeaFizzlesOutFireTypeMoves[];
|
||||||
|
extern const u8 BattleScript_DeltaStreamActivates[];
|
||||||
|
extern const u8 BattleScript_MysteriousAirCurrentBlowsOn[];
|
||||||
|
extern const u8 BattleScript_AttackWeakenedByStrongWinds[];
|
||||||
|
extern const u8 BattleScript_BlockedByPrimalWeatherEnd3[];
|
||||||
|
extern const u8 BattleScript_BlockedByPrimalWeatherRet[];
|
||||||
extern const u8 BattleScript_MagicianActivates[];
|
extern const u8 BattleScript_MagicianActivates[];
|
||||||
|
|
||||||
#endif // GUARD_BATTLE_SCRIPTS_H
|
#endif // GUARD_BATTLE_SCRIPTS_H
|
||||||
|
@ -257,24 +257,31 @@
|
|||||||
#define WEATHER_RAIN_TEMPORARY (1 << 0)
|
#define WEATHER_RAIN_TEMPORARY (1 << 0)
|
||||||
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
|
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
|
||||||
#define WEATHER_RAIN_PERMANENT (1 << 2)
|
#define WEATHER_RAIN_PERMANENT (1 << 2)
|
||||||
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT)
|
#define WEATHER_RAIN_PRIMAL (1 << 3)
|
||||||
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
|
#define WEATHER_RAIN_ANY (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT | WEATHER_RAIN_PRIMAL)
|
||||||
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
|
#define WEATHER_SANDSTORM_TEMPORARY (1 << 4)
|
||||||
|
#define WEATHER_SANDSTORM_PERMANENT (1 << 5)
|
||||||
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
|
#define WEATHER_SANDSTORM_ANY (WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT)
|
||||||
#define WEATHER_SUN_TEMPORARY (1 << 5)
|
#define WEATHER_SUN_TEMPORARY (1 << 6)
|
||||||
#define WEATHER_SUN_PERMANENT (1 << 6)
|
#define WEATHER_SUN_PERMANENT (1 << 7)
|
||||||
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT)
|
#define WEATHER_SUN_PRIMAL (1 << 8)
|
||||||
#define WEATHER_HAIL_TEMPORARY (1 << 7)
|
#define WEATHER_SUN_ANY (WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT | WEATHER_SUN_PRIMAL)
|
||||||
#define WEATHER_HAIL_PERMANENT (1 << 8)
|
#define WEATHER_HAIL_TEMPORARY (1 << 9)
|
||||||
|
#define WEATHER_HAIL_PERMANENT (1 << 10)
|
||||||
#define WEATHER_HAIL_ANY (WEATHER_HAIL_TEMPORARY | WEATHER_HAIL_PERMANENT)
|
#define WEATHER_HAIL_ANY (WEATHER_HAIL_TEMPORARY | WEATHER_HAIL_PERMANENT)
|
||||||
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
|
#define WEATHER_STRONG_WINDS (1 << 11)
|
||||||
|
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY | WEATHER_STRONG_WINDS)
|
||||||
|
#define WEATHER_PRIMAL_ANY (WEATHER_RAIN_PRIMAL | WEATHER_SUN_PRIMAL | WEATHER_STRONG_WINDS)
|
||||||
|
|
||||||
// Battle Weather as enum
|
// Battle Weather as enum
|
||||||
#define ENUM_WEATHER_NONE 0
|
#define ENUM_WEATHER_NONE 0
|
||||||
#define ENUM_WEATHER_RAIN 1
|
#define ENUM_WEATHER_RAIN 1
|
||||||
#define ENUM_WEATHER_SUN 2
|
#define ENUM_WEATHER_SUN 2
|
||||||
#define ENUM_WEATHER_SANDSTORM 3
|
#define ENUM_WEATHER_SANDSTORM 3
|
||||||
#define ENUM_WEATHER_HAIL 4
|
#define ENUM_WEATHER_HAIL 4
|
||||||
|
#define ENUM_WEATHER_SUN_PRIMAL 5
|
||||||
|
#define ENUM_WEATHER_RAIN_PRIMAL 6
|
||||||
|
#define ENUM_WEATHER_STRONG_WINDS 7
|
||||||
|
|
||||||
// Move Effects
|
// Move Effects
|
||||||
#define MOVE_EFFECT_SLEEP 0x1
|
#define MOVE_EFFECT_SLEEP 0x1
|
||||||
|
@ -524,6 +524,7 @@
|
|||||||
#define B_ANIM_RESTORE_BG 27 // for Terrain Endings
|
#define B_ANIM_RESTORE_BG 27 // for Terrain Endings
|
||||||
#define B_ANIM_TOTEM_FLARE 28 // Totem boosts aura flare
|
#define B_ANIM_TOTEM_FLARE 28 // Totem boosts aura flare
|
||||||
#define B_ANIM_GULP_MISSILE 29
|
#define B_ANIM_GULP_MISSILE 29
|
||||||
|
#define B_ANIM_STRONG_WINDS 30
|
||||||
|
|
||||||
// special animations table (gBattleAnims_Special)
|
// special animations table (gBattleAnims_Special)
|
||||||
#define B_ANIM_LVL_UP 0
|
#define B_ANIM_LVL_UP 0
|
||||||
|
@ -184,6 +184,7 @@
|
|||||||
#define VARIOUS_TRY_HEAL_QUARTER_HP 112
|
#define VARIOUS_TRY_HEAL_QUARTER_HP 112
|
||||||
#define VARIOUS_REMOVE_TERRAIN 113
|
#define VARIOUS_REMOVE_TERRAIN 113
|
||||||
#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114
|
#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 114
|
||||||
|
#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 115
|
||||||
|
|
||||||
// Cmd_manipulatedamage
|
// Cmd_manipulatedamage
|
||||||
#define DMG_CHANGE_SIGN 0
|
#define DMG_CHANGE_SIGN 0
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4697,6 +4697,7 @@ extern const u32 gBattleAnimSpritePal_MagnifyingGlass[];
|
|||||||
extern const u32 gBattleAnimSpritePal_BrownOrb[];
|
extern const u32 gBattleAnimSpritePal_BrownOrb[];
|
||||||
extern const u32 gBattleAnimSpritePal_MetalSoundWaves[];
|
extern const u32 gBattleAnimSpritePal_MetalSoundWaves[];
|
||||||
extern const u32 gBattleAnimSpritePal_FlyingDirt[];
|
extern const u32 gBattleAnimSpritePal_FlyingDirt[];
|
||||||
|
extern const u32 gBattleAnimSpritePal_Windstorm[];
|
||||||
extern const u32 gBattleAnimSpritePal_IcicleSpear[];
|
extern const u32 gBattleAnimSpritePal_IcicleSpear[];
|
||||||
extern const u32 gBattleAnimSpritePal_Hail[];
|
extern const u32 gBattleAnimSpritePal_Hail[];
|
||||||
extern const u32 gBattleAnimSpritePal_GlowyRedOrb[];
|
extern const u32 gBattleAnimSpritePal_GlowyRedOrb[];
|
||||||
@ -5199,6 +5200,9 @@ extern const u16 gSlotMachineReelTimePikachu_Pal[];
|
|||||||
extern const u32 gBattleAnimBgTilemap_Sandstorm[];
|
extern const u32 gBattleAnimBgTilemap_Sandstorm[];
|
||||||
extern const u32 gBattleAnimBgImage_Sandstorm[];
|
extern const u32 gBattleAnimBgImage_Sandstorm[];
|
||||||
|
|
||||||
|
extern const u32 gBattleAnimBgTilemap_Windstorm[];
|
||||||
|
extern const u32 gBattleAnimBgImage_Windstorm[];
|
||||||
|
|
||||||
// Pokedex Area Screen
|
// Pokedex Area Screen
|
||||||
extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
|
extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
|
||||||
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
|
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
|
||||||
|
@ -512,7 +512,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
// move data
|
// move data
|
||||||
u8 atkPriority = GetMovePriority(battlerAtk, move);
|
u8 atkPriority = GetMovePriority(battlerAtk, move);
|
||||||
u16 moveEffect = gBattleMoves[move].effect;
|
u16 moveEffect = gBattleMoves[move].effect;
|
||||||
u8 moveType = gBattleMoves[move].type;
|
s32 moveType;
|
||||||
u8 moveTarget = gBattleMoves[move].target;
|
u8 moveTarget = gBattleMoves[move].target;
|
||||||
u16 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, AI_DATA->atkAbility, AI_DATA->defAbility, AI_DATA->atkHoldEffect, AI_DATA->defHoldEffect, move);
|
u16 accuracy = AI_GetMoveAccuracy(battlerAtk, battlerDef, AI_DATA->atkAbility, AI_DATA->defAbility, AI_DATA->atkHoldEffect, AI_DATA->defHoldEffect, move);
|
||||||
u8 effectiveness = AI_GetMoveEffectiveness(move, battlerAtk, battlerDef);
|
u8 effectiveness = AI_GetMoveEffectiveness(move, battlerAtk, battlerDef);
|
||||||
@ -525,6 +525,8 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
|
|
||||||
if (IsTargetingPartner(battlerAtk, battlerDef))
|
if (IsTargetingPartner(battlerAtk, battlerDef))
|
||||||
return score;
|
return score;
|
||||||
|
|
||||||
|
GET_MOVE_TYPE(move, moveType);
|
||||||
|
|
||||||
// check non-user target
|
// check non-user target
|
||||||
if (!(gBattleMoves[move].target & MOVE_TARGET_USER))
|
if (!(gBattleMoves[move].target & MOVE_TARGET_USER))
|
||||||
@ -751,7 +753,34 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move))
|
if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(battlerAtk, move))
|
||||||
return 0; // Can't even select heal blocked move
|
return 0; // Can't even select heal blocked move
|
||||||
// primal weather check
|
// primal weather check
|
||||||
//TODO
|
if (WEATHER_HAS_EFFECT)
|
||||||
|
{
|
||||||
|
if (gBattleWeather & WEATHER_PRIMAL_ANY)
|
||||||
|
{
|
||||||
|
switch (move)
|
||||||
|
{
|
||||||
|
case MOVE_SUNNY_DAY:
|
||||||
|
case MOVE_RAIN_DANCE:
|
||||||
|
case MOVE_HAIL:
|
||||||
|
case MOVE_SANDSTORM:
|
||||||
|
RETURN_SCORE_MINUS(30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IS_MOVE_STATUS(move))
|
||||||
|
{
|
||||||
|
if (gBattleWeather & WEATHER_SUN_PRIMAL)
|
||||||
|
{
|
||||||
|
if (moveType == TYPE_WATER)
|
||||||
|
RETURN_SCORE_MINUS(30);
|
||||||
|
}
|
||||||
|
else if (gBattleWeather & WEATHER_RAIN_PRIMAL)
|
||||||
|
{
|
||||||
|
if (moveType == TYPE_FIRE)
|
||||||
|
RETURN_SCORE_MINUS(30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// check move effects
|
// check move effects
|
||||||
switch (moveEffect)
|
switch (moveEffect)
|
||||||
@ -2437,13 +2466,32 @@ static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score)
|
|||||||
switch (AI_GetMoveEffectiveness(move, battlerAtk, battlerDef))
|
switch (AI_GetMoveEffectiveness(move, battlerAtk, battlerDef))
|
||||||
{
|
{
|
||||||
case AI_EFFECTIVENESS_x4:
|
case AI_EFFECTIVENESS_x4:
|
||||||
score += 4;
|
if (WEATHER_HAS_EFFECT
|
||||||
|
&& gBattleWeather & WEATHER_STRONG_WINDS
|
||||||
|
&& IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING))
|
||||||
|
{
|
||||||
|
if (AI_RandLessThan(176)) //Consider it supereffective instead of hypereffective.
|
||||||
|
score += 2;
|
||||||
|
else
|
||||||
|
score++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
score += 4;
|
||||||
break;
|
break;
|
||||||
case AI_EFFECTIVENESS_x2:
|
case AI_EFFECTIVENESS_x2:
|
||||||
if (AI_RandLessThan(176))
|
if (WEATHER_HAS_EFFECT
|
||||||
score += 2;
|
&& gBattleWeather & WEATHER_STRONG_WINDS
|
||||||
|
&& IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING))
|
||||||
|
{
|
||||||
|
break; // Don't increase score, consider it neutral.
|
||||||
|
}
|
||||||
else
|
else
|
||||||
score++;
|
{
|
||||||
|
if (AI_RandLessThan(176))
|
||||||
|
score += 2;
|
||||||
|
else
|
||||||
|
score++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include "constants/battle_anim.h"
|
#include "constants/battle_anim.h"
|
||||||
#include "constants/rgb.h"
|
#include "constants/rgb.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
#include "gpu_regs.h"
|
||||||
|
#include "graphics.h"
|
||||||
|
|
||||||
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
|
extern const struct SpriteTemplate gFlashingHitSplatSpriteTemplate;
|
||||||
|
|
||||||
@ -30,7 +32,7 @@ static void AnimUnusedFlashingLight_Step(struct Sprite *);
|
|||||||
static void AnimSkyAttackBird(struct Sprite *);
|
static void AnimSkyAttackBird(struct Sprite *);
|
||||||
static void AnimSkyAttackBird_Step(struct Sprite *);
|
static void AnimSkyAttackBird_Step(struct Sprite *);
|
||||||
static void AnimTask_AnimateGustTornadoPalette_Step(u8);
|
static void AnimTask_AnimateGustTornadoPalette_Step(u8);
|
||||||
|
static void AnimTask_LoadWindstormBackground_Step(u8 taskId);
|
||||||
|
|
||||||
const struct SpriteTemplate gEllipticalGustSpriteTemplate =
|
const struct SpriteTemplate gEllipticalGustSpriteTemplate =
|
||||||
{
|
{
|
||||||
@ -1231,3 +1233,99 @@ static void AnimTask_SetAttackerVisibility(u8 taskId)
|
|||||||
}
|
}
|
||||||
DestroyAnimVisualTask(taskId);
|
DestroyAnimVisualTask(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimTask_LoadWindstormBackground(u8 taskId)
|
||||||
|
{
|
||||||
|
int var0;
|
||||||
|
struct BattleAnimBgData animBg;
|
||||||
|
|
||||||
|
var0 = 0;
|
||||||
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
|
||||||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||||||
|
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
|
||||||
|
|
||||||
|
if (!IsContest())
|
||||||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
|
||||||
|
|
||||||
|
gBattle_BG1_X = 0;
|
||||||
|
gBattle_BG1_Y = 0;
|
||||||
|
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
|
||||||
|
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
|
||||||
|
|
||||||
|
GetBattleAnimBg1Data(&animBg);
|
||||||
|
AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Windstorm, animBg.tilesOffset);
|
||||||
|
AnimLoadCompressedBgTilemapHandleContest(&animBg, gBattleAnimBgTilemap_Windstorm, 0);
|
||||||
|
LoadCompressedPalette(gBattleAnimSpritePal_Windstorm, animBg.paletteId * 16, 32);
|
||||||
|
|
||||||
|
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
|
||||||
|
var0 = 1;
|
||||||
|
|
||||||
|
gTasks[taskId].data[0] = var0;
|
||||||
|
gTasks[taskId].func = AnimTask_LoadWindstormBackground_Step;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void AnimTask_LoadWindstormBackground_Step(u8 taskId)
|
||||||
|
{
|
||||||
|
struct BattleAnimBgData animBg;
|
||||||
|
|
||||||
|
if (gTasks[taskId].data[0] == 0)
|
||||||
|
gBattle_BG1_X += -6;
|
||||||
|
else
|
||||||
|
gBattle_BG1_X += 6;
|
||||||
|
|
||||||
|
gBattle_BG1_Y += -1;
|
||||||
|
|
||||||
|
switch (gTasks[taskId].data[12])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (++gTasks[taskId].data[10] == 4)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[10] = 0;
|
||||||
|
gTasks[taskId].data[11]++;
|
||||||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
|
||||||
|
if (gTasks[taskId].data[11] == 7)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[12]++;
|
||||||
|
gTasks[taskId].data[11] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (++gTasks[taskId].data[11] == 101)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[11] = 7;
|
||||||
|
gTasks[taskId].data[12]++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (++gTasks[taskId].data[10] == 4)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[10] = 0;
|
||||||
|
gTasks[taskId].data[11]--;
|
||||||
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
|
||||||
|
if (gTasks[taskId].data[11] == 0)
|
||||||
|
{
|
||||||
|
gTasks[taskId].data[12]++;
|
||||||
|
gTasks[taskId].data[11] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
GetBattleAnimBg1Data(&animBg);
|
||||||
|
ClearBattleAnimBg(animBg.bgId);
|
||||||
|
gTasks[taskId].data[12]++;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (!IsContest())
|
||||||
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
|
||||||
|
|
||||||
|
gBattle_BG1_X = 0;
|
||||||
|
gBattle_BG1_Y = 0;
|
||||||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||||
|
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
|
||||||
|
DestroyAnimVisualTask(taskId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -706,9 +706,33 @@ static const u8 sText_TormentedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is\ntormen
|
|||||||
static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!");
|
static const u8 sText_HealBlockedNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is cured of\nits heal block!");
|
||||||
static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p");
|
static const u8 sText_AttackerBecameFullyCharged[] = _("{B_ATK_NAME_WITH_PREFIX} became fully charged\ndue to its bond with its trainer!\p");
|
||||||
static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p");
|
static const u8 sText_AttackerBecameAshSpecies[] = _("{B_ATK_NAME_WITH_PREFIX} became Ash-{B_BUFF1}!\p");
|
||||||
|
static const u8 sText_ExtremelyHarshSunlight[] = _("The sunlight turned\nextremely harsh!");
|
||||||
|
static const u8 sText_ExtremeSunlightFaded[] = _("The extreme sunlight faded.{PAUSE 64}");
|
||||||
|
static const u8 sText_MoveEvaporatedInTheHarshSunlight[] = _("The Water-type attack evaporated\nin the harsh sunlight!");
|
||||||
|
static const u8 sText_ExtremelyHarshSunlightWasNotLessened[] = _("The extremely harsh sunlight\nwas not lessened at all!");
|
||||||
|
static const u8 sText_HeavyRain[] = _("A heavy rain began to fall!");
|
||||||
|
static const u8 sText_HeavyRainLifted[] = _("The heavy rain has lifted!{PAUSE 64}");
|
||||||
|
static const u8 sText_MoveFizzledOutInTheHeavyRain[] = _("The Fire-type attack fizzled out\nin the heavy rain!");
|
||||||
|
static const u8 sText_NoReliefFromHeavyRain[] = _("There is no relief from\nthis heavy rain!");
|
||||||
|
static const u8 sText_MysteriousAirCurrent[] = _("A mysterious air current is\nprotecting Flying-type Pokémon!");
|
||||||
|
static const u8 sText_StrongWindsDissipated[] = _("The mysterious strong winds\nhave dissipated!{PAUSE 64}");
|
||||||
|
static const u8 sText_MysteriousAirCurrentBlowsOn[] = _("The mysterious air current\nblows on regardless!");
|
||||||
|
static const u8 sText_AttackWeakenedByStrongWinds[] = _("The mysterious strong winds\nweakened the attack!");
|
||||||
|
|
||||||
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
|
||||||
{
|
{
|
||||||
|
[STRINGID_ATTACKWEAKENEDBSTRONGWINDS - 12] = sText_AttackWeakenedByStrongWinds,
|
||||||
|
[STRINGID_MYSTERIOUSAIRCURRENTBLOWSON - 12] = sText_MysteriousAirCurrentBlowsOn,
|
||||||
|
[STRINGID_STRONGWINDSDISSIPATED - 12] = sText_StrongWindsDissipated,
|
||||||
|
[STRINGID_MYSTERIOUSAIRCURRENT - 12] = sText_MysteriousAirCurrent,
|
||||||
|
[STRINGID_NORELIEFROMHEAVYRAIN - 12] = sText_NoReliefFromHeavyRain,
|
||||||
|
[STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN - 12] = sText_MoveFizzledOutInTheHeavyRain,
|
||||||
|
[STRINGID_HEAVYRAINLIFTED - 12] = sText_HeavyRainLifted,
|
||||||
|
[STRINGID_HEAVYRAIN - 12] = sText_HeavyRain,
|
||||||
|
[STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED - 12] = sText_ExtremelyHarshSunlightWasNotLessened,
|
||||||
|
[STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT - 12] = sText_MoveEvaporatedInTheHarshSunlight,
|
||||||
|
[STRINGID_EXTREMESUNLIGHTFADED - 12] = sText_ExtremeSunlightFaded,
|
||||||
|
[STRINGID_EXTREMELYHARSHSUNLIGHT - 12] = sText_ExtremelyHarshSunlight,
|
||||||
[STRINGID_ATTACKERBECAMEASHSPECIES - 12] = sText_AttackerBecameAshSpecies,
|
[STRINGID_ATTACKERBECAMEASHSPECIES - 12] = sText_AttackerBecameAshSpecies,
|
||||||
[STRINGID_ATTACKERBECAMEFULLYCHARGED - 12] = sText_AttackerBecameFullyCharged,
|
[STRINGID_ATTACKERBECAMEFULLYCHARGED - 12] = sText_AttackerBecameFullyCharged,
|
||||||
[STRINGID_HEALBLOCKEDNOMORE - 12] = sText_HealBlockedNoMore,
|
[STRINGID_HEALBLOCKEDNOMORE - 12] = sText_HealBlockedNoMore,
|
||||||
|
@ -1334,6 +1334,28 @@ static void Cmd_attackcanceler(void)
|
|||||||
{
|
{
|
||||||
s32 i, moveType;
|
s32 i, moveType;
|
||||||
|
|
||||||
|
GET_MOVE_TYPE(gCurrentMove, moveType);
|
||||||
|
|
||||||
|
if (moveType == TYPE_FIRE
|
||||||
|
&& (gBattleWeather & WEATHER_RAIN_PRIMAL)
|
||||||
|
&& WEATHER_HAS_EFFECT
|
||||||
|
&& gBattleMoves[gCurrentMove].power)
|
||||||
|
{
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_PrimordialSeaFizzlesOutFireTypeMoves;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (moveType == TYPE_WATER
|
||||||
|
&& (gBattleWeather & WEATHER_SUN_PRIMAL)
|
||||||
|
&& WEATHER_HAS_EFFECT
|
||||||
|
&& gBattleMoves[gCurrentMove].power)
|
||||||
|
{
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_DesolateLandEvaporatesWaterTypeMoves;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (gBattleOutcome != 0)
|
if (gBattleOutcome != 0)
|
||||||
{
|
{
|
||||||
gCurrentActionFuncId = B_ACTION_FINISHED;
|
gCurrentActionFuncId = B_ACTION_FINISHED;
|
||||||
@ -1353,7 +1375,6 @@ static void Cmd_attackcanceler(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Check Protean activation.
|
// Check Protean activation.
|
||||||
GET_MOVE_TYPE(gCurrentMove, moveType);
|
|
||||||
if ((GetBattlerAbility(gBattlerAttacker) == ABILITY_PROTEAN || GetBattlerAbility(gBattlerAttacker) == ABILITY_LIBERO)
|
if ((GetBattlerAbility(gBattlerAttacker) == ABILITY_PROTEAN || GetBattlerAbility(gBattlerAttacker) == ABILITY_LIBERO)
|
||||||
&& (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType ||
|
&& (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType ||
|
||||||
(gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY))
|
(gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY))
|
||||||
@ -1893,6 +1914,9 @@ static void Cmd_typecalc(void)
|
|||||||
static void Cmd_adjustdamage(void)
|
static void Cmd_adjustdamage(void)
|
||||||
{
|
{
|
||||||
u8 holdEffect, param;
|
u8 holdEffect, param;
|
||||||
|
u32 moveType;
|
||||||
|
|
||||||
|
GET_MOVE_TYPE(gCurrentMove, moveType);
|
||||||
|
|
||||||
if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
|
if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
|
||||||
goto END;
|
goto END;
|
||||||
@ -1970,6 +1994,23 @@ END:
|
|||||||
gBattlescriptCurrInstr = BattleScript_GemActivates;
|
gBattlescriptCurrInstr = BattleScript_GemActivates;
|
||||||
gLastUsedItem = gBattleMons[gBattlerAttacker].item;
|
gLastUsedItem = gBattleMons[gBattlerAttacker].item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WEATHER_STRONG_WINDS prints a string when it's about to reduce the power
|
||||||
|
// of a move that is Super Effective against a Flying-type Pokémon.
|
||||||
|
if (gBattleWeather & WEATHER_STRONG_WINDS)
|
||||||
|
{
|
||||||
|
if ((gBattleMons[gBattlerTarget].type1 == TYPE_FLYING
|
||||||
|
&& GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type1) >= UQ_4_12(2.0))
|
||||||
|
|| (gBattleMons[gBattlerTarget].type2 == TYPE_FLYING
|
||||||
|
&& GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type2) >= UQ_4_12(2.0))
|
||||||
|
|| (gBattleMons[gBattlerTarget].type3 == TYPE_FLYING
|
||||||
|
&& GetTypeModifier(moveType, gBattleMons[gBattlerTarget].type3) >= UQ_4_12(2.0)))
|
||||||
|
{
|
||||||
|
gBattlerAbility = gBattlerTarget;
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_AttackWeakenedByStrongWinds;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Cmd_multihitresultmessage(void)
|
static void Cmd_multihitresultmessage(void)
|
||||||
@ -8765,12 +8806,45 @@ static void Cmd_various(void)
|
|||||||
}
|
}
|
||||||
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain
|
||||||
break;
|
break;
|
||||||
case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
|
case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED:
|
||||||
if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler))
|
if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler))
|
||||||
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
|
||||||
else
|
else
|
||||||
gBattlescriptCurrInstr += 7;
|
gBattlescriptCurrInstr += 7;
|
||||||
return;
|
return;
|
||||||
|
case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER:
|
||||||
|
{
|
||||||
|
bool8 shouldNotClear = FALSE;
|
||||||
|
|
||||||
|
for (i = 0; i < gBattlersCount; i++)
|
||||||
|
{
|
||||||
|
if (((GetBattlerAbility(i) == ABILITY_DESOLATE_LAND && gBattleWeather & WEATHER_SUN_PRIMAL)
|
||||||
|
|| (GetBattlerAbility(i) == ABILITY_PRIMORDIAL_SEA && gBattleWeather & WEATHER_RAIN_PRIMAL)
|
||||||
|
|| (GetBattlerAbility(i) == ABILITY_DELTA_STREAM && gBattleWeather & WEATHER_STRONG_WINDS))
|
||||||
|
&& IsBattlerAlive(i)
|
||||||
|
&& !(gStatuses3[i] & STATUS3_GASTRO_ACID))
|
||||||
|
shouldNotClear = TRUE;
|
||||||
|
}
|
||||||
|
if (gBattleWeather & WEATHER_SUN_PRIMAL && !shouldNotClear)
|
||||||
|
{
|
||||||
|
gBattleWeather &= ~WEATHER_SUN_PRIMAL;
|
||||||
|
PrepareStringBattle(STRINGID_EXTREMESUNLIGHTFADED, gActiveBattler);
|
||||||
|
gBattleCommunication[MSG_DISPLAY] = 1;
|
||||||
|
}
|
||||||
|
else if (gBattleWeather & WEATHER_RAIN_PRIMAL && !shouldNotClear)
|
||||||
|
{
|
||||||
|
gBattleWeather &= ~WEATHER_RAIN_PRIMAL;
|
||||||
|
PrepareStringBattle(STRINGID_HEAVYRAINLIFTED, gActiveBattler);
|
||||||
|
gBattleCommunication[MSG_DISPLAY] = 1;
|
||||||
|
}
|
||||||
|
else if (gBattleWeather & WEATHER_STRONG_WINDS && !shouldNotClear)
|
||||||
|
{
|
||||||
|
gBattleWeather &= ~WEATHER_STRONG_WINDS;
|
||||||
|
PrepareStringBattle(STRINGID_STRONGWINDSDISSIPATED, gActiveBattler);
|
||||||
|
gBattleCommunication[MSG_DISPLAY] = 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gBattlescriptCurrInstr += 3;
|
gBattlescriptCurrInstr += 3;
|
||||||
|
@ -2106,7 +2106,8 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
case ENDTURN_RAIN:
|
case ENDTURN_RAIN:
|
||||||
if (gBattleWeather & WEATHER_RAIN_ANY)
|
if (gBattleWeather & WEATHER_RAIN_ANY)
|
||||||
{
|
{
|
||||||
if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
|
if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)
|
||||||
|
&& !(gBattleWeather & WEATHER_RAIN_PRIMAL))
|
||||||
{
|
{
|
||||||
if (--gWishFutureKnock.weatherDuration == 0)
|
if (--gWishFutureKnock.weatherDuration == 0)
|
||||||
{
|
{
|
||||||
@ -2156,7 +2157,9 @@ u8 DoFieldEndTurnEffects(void)
|
|||||||
case ENDTURN_SUN:
|
case ENDTURN_SUN:
|
||||||
if (gBattleWeather & WEATHER_SUN_ANY)
|
if (gBattleWeather & WEATHER_SUN_ANY)
|
||||||
{
|
{
|
||||||
if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
if (!(gBattleWeather & WEATHER_SUN_PERMANENT)
|
||||||
|
&& !(gBattleWeather & WEATHER_SUN_PRIMAL)
|
||||||
|
&& --gWishFutureKnock.weatherDuration == 0)
|
||||||
{
|
{
|
||||||
gBattleWeather &= ~WEATHER_SUN_TEMPORARY;
|
gBattleWeather &= ~WEATHER_SUN_TEMPORARY;
|
||||||
gBattlescriptCurrInstr = BattleScript_SunlightFaded;
|
gBattlescriptCurrInstr = BattleScript_SunlightFaded;
|
||||||
@ -3675,9 +3678,12 @@ u8 TryWeatherFormChange(u8 battler)
|
|||||||
static const u16 sWeatherFlagsInfo[][3] =
|
static const u16 sWeatherFlagsInfo[][3] =
|
||||||
{
|
{
|
||||||
[ENUM_WEATHER_RAIN] = {WEATHER_RAIN_TEMPORARY, WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK},
|
[ENUM_WEATHER_RAIN] = {WEATHER_RAIN_TEMPORARY, WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK},
|
||||||
|
[ENUM_WEATHER_RAIN_PRIMAL] = {WEATHER_RAIN_PRIMAL, WEATHER_RAIN_PRIMAL, HOLD_EFFECT_DAMP_ROCK},
|
||||||
[ENUM_WEATHER_SUN] = {WEATHER_SUN_TEMPORARY, WEATHER_SUN_PERMANENT, HOLD_EFFECT_HEAT_ROCK},
|
[ENUM_WEATHER_SUN] = {WEATHER_SUN_TEMPORARY, WEATHER_SUN_PERMANENT, HOLD_EFFECT_HEAT_ROCK},
|
||||||
|
[ENUM_WEATHER_SUN_PRIMAL] = {WEATHER_SUN_PRIMAL, WEATHER_SUN_PRIMAL, HOLD_EFFECT_HEAT_ROCK},
|
||||||
[ENUM_WEATHER_SANDSTORM] = {WEATHER_SANDSTORM_TEMPORARY, WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK},
|
[ENUM_WEATHER_SANDSTORM] = {WEATHER_SANDSTORM_TEMPORARY, WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK},
|
||||||
[ENUM_WEATHER_HAIL] = {WEATHER_HAIL_TEMPORARY, WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK},
|
[ENUM_WEATHER_HAIL] = {WEATHER_HAIL_TEMPORARY, WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK},
|
||||||
|
[ENUM_WEATHER_STRONG_WINDS] = {WEATHER_STRONG_WINDS, WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE},
|
||||||
};
|
};
|
||||||
|
|
||||||
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility)
|
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility)
|
||||||
@ -3688,6 +3694,13 @@ bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility)
|
|||||||
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]);
|
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
else if (gBattleWeather & WEATHER_PRIMAL_ANY
|
||||||
|
&& GetBattlerAbility(battler) != ABILITY_DESOLATE_LAND
|
||||||
|
&& GetBattlerAbility(battler) != ABILITY_PRIMORDIAL_SEA
|
||||||
|
&& GetBattlerAbility(battler) != ABILITY_DELTA_STREAM)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1])))
|
else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1])))
|
||||||
{
|
{
|
||||||
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]);
|
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]);
|
||||||
@ -4158,6 +4171,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY && !gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
|
{
|
||||||
|
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_SAND_STREAM:
|
case ABILITY_SAND_STREAM:
|
||||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
|
||||||
@ -4165,6 +4184,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY && !gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
|
{
|
||||||
|
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_DROUGHT:
|
case ABILITY_DROUGHT:
|
||||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE))
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE))
|
||||||
@ -4172,6 +4197,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY && !gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
|
{
|
||||||
|
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_SNOW_WARNING:
|
case ABILITY_SNOW_WARNING:
|
||||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE))
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE))
|
||||||
@ -4179,6 +4210,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates);
|
BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivates);
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY && !gSpecialStatuses[battler].switchInAbilityDone)
|
||||||
|
{
|
||||||
|
gSpecialStatuses[battler].switchInAbilityDone = 1;
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_BlockedByPrimalWeatherEnd3);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_ELECTRIC_SURGE:
|
case ABILITY_ELECTRIC_SURGE:
|
||||||
if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.electricTerrainTimer))
|
if (TryChangeBattleTerrain(battler, STATUS_FIELD_ELECTRIC_TERRAIN, &gFieldTimers.electricTerrainTimer))
|
||||||
@ -4268,6 +4305,27 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ABILITY_DESOLATE_LAND:
|
||||||
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN_PRIMAL, TRUE))
|
||||||
|
{
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_DesolateLandActivates);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ABILITY_PRIMORDIAL_SEA:
|
||||||
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN_PRIMAL, TRUE))
|
||||||
|
{
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_PrimordialSeaActivates);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ABILITY_DELTA_STREAM:
|
||||||
|
if (TryChangeBattleWeather(battler, ENUM_WEATHER_STRONG_WINDS, TRUE))
|
||||||
|
{
|
||||||
|
BattleScriptPushCursorAndCallback(BattleScript_DeltaStreamActivates);
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITYEFFECT_ENDTURN: // 1
|
case ABILITYEFFECT_ENDTURN: // 1
|
||||||
@ -4959,13 +5017,20 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
|
|||||||
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
|
||||||
&& TARGET_TURN_DAMAGED
|
&& TARGET_TURN_DAMAGED
|
||||||
&& !(WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SANDSTORM_ANY)
|
&& !(WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SANDSTORM_ANY)
|
||||||
&& TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
|
&& TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE)
|
||||||
|
&& !(WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY))
|
||||||
{
|
{
|
||||||
gBattleScripting.battler = gActiveBattler = battler;
|
gBattleScripting.battler = gActiveBattler = battler;
|
||||||
BattleScriptPushCursor();
|
BattleScriptPushCursor();
|
||||||
gBattlescriptCurrInstr = BattleScript_SandSpitActivates;
|
gBattlescriptCurrInstr = BattleScript_SandSpitActivates;
|
||||||
effect++;
|
effect++;
|
||||||
}
|
}
|
||||||
|
else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_PRIMAL_ANY)
|
||||||
|
{
|
||||||
|
BattleScriptPushCursor();
|
||||||
|
gBattlescriptCurrInstr = BattleScript_BlockedByPrimalWeatherRet;
|
||||||
|
effect++;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_PERISH_BODY:
|
case ABILITY_PERISH_BODY:
|
||||||
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
|
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
|
||||||
@ -8453,6 +8518,13 @@ static void MulByTypeEffectiveness(u16 *modifier, u16 move, u8 moveType, u8 batt
|
|||||||
if (gProtectStructs[battlerDef].kingsShielded && gBattleMoves[move].effect != EFFECT_FEINT)
|
if (gProtectStructs[battlerDef].kingsShielded && gBattleMoves[move].effect != EFFECT_FEINT)
|
||||||
mod = UQ_4_12(1.0);
|
mod = UQ_4_12(1.0);
|
||||||
|
|
||||||
|
// WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon
|
||||||
|
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_STRONG_WINDS)
|
||||||
|
{
|
||||||
|
if (defType == TYPE_FLYING && mod >= UQ_4_12(2.0))
|
||||||
|
mod = UQ_4_12(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
MulModifier(modifier, mod);
|
MulModifier(modifier, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1312,11 +1312,14 @@ const u32 gUnknown_08D85A1C[] = INCBIN_U32("graphics/battle_frontier/battle_tile
|
|||||||
#include "data/graphics/intro_scene.h"
|
#include "data/graphics/intro_scene.h"
|
||||||
|
|
||||||
const u32 gBattleAnimSpriteGfx_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.4bpp.lz");
|
const u32 gBattleAnimSpriteGfx_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.4bpp.lz");
|
||||||
|
const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimBgTilemap_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz");
|
const u32 gBattleAnimBgTilemap_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz");
|
||||||
const u32 gBattleAnimBgImage_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz");
|
const u32 gBattleAnimBgImage_Sandstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimSpritePal_FlyingDirt[] = INCBIN_U32("graphics/battle_anims/sprites/flying_dirt.gbapal.lz");
|
const u32 gBattleAnimBgTilemap_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/sandstorm_brew.bin.lz");
|
||||||
|
const u32 gBattleAnimBgImage_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.4bpp.lz");
|
||||||
|
const u32 gBattleAnimSpritePal_Windstorm[] = INCBIN_U32("graphics/battle_anims/backgrounds/windstorm_brew.gbapal.lz");
|
||||||
|
|
||||||
const u32 gBattleAnimSpriteGfx_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.4bpp.lz");
|
const u32 gBattleAnimSpriteGfx_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.4bpp.lz");
|
||||||
const u32 gBattleAnimSpritePal_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.gbapal.lz");
|
const u32 gBattleAnimSpritePal_MetalSoundWaves[] = INCBIN_U32("graphics/battle_anims/sprites/metal_sound_waves.gbapal.lz");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user