Battle Weather Refactor (#5833)
This commit is contained in:
commit
03684c6539
@ -272,7 +272,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
|
||||
setfieldweather ENUM_WEATHER_SNOW
|
||||
setfieldweather BATTLE_WEATHER_SNOW
|
||||
call BattleScript_MoveWeatherChangeRet
|
||||
goto BattleScript_MoveSwitch
|
||||
BattleScript_EffectChillyReceptionPlayAnimation:
|
||||
@ -4273,7 +4273,7 @@ BattleScript_EffectSandstorm::
|
||||
attackstring
|
||||
ppreduce
|
||||
call BattleScript_CheckPrimalWeather
|
||||
setfieldweather ENUM_WEATHER_SANDSTORM
|
||||
setfieldweather BATTLE_WEATHER_SANDSTORM
|
||||
goto BattleScript_MoveWeatherChange
|
||||
|
||||
BattleScript_EffectRollout::
|
||||
@ -4439,7 +4439,7 @@ BattleScript_EffectRainDance::
|
||||
attackstring
|
||||
ppreduce
|
||||
call BattleScript_CheckPrimalWeather
|
||||
setfieldweather ENUM_WEATHER_RAIN
|
||||
setfieldweather BATTLE_WEATHER_RAIN
|
||||
BattleScript_MoveWeatherChange::
|
||||
attackanimation
|
||||
waitanimation
|
||||
@ -4457,7 +4457,7 @@ BattleScript_EffectSunnyDay::
|
||||
attackstring
|
||||
ppreduce
|
||||
call BattleScript_CheckPrimalWeather
|
||||
setfieldweather ENUM_WEATHER_SUN
|
||||
setfieldweather BATTLE_WEATHER_SUN
|
||||
goto BattleScript_MoveWeatherChange
|
||||
|
||||
BattleScript_ExtremelyHarshSunlightWasNotLessened:
|
||||
@ -4816,7 +4816,7 @@ BattleScript_EffectHail::
|
||||
attackstring
|
||||
ppreduce
|
||||
call BattleScript_CheckPrimalWeather
|
||||
setfieldweather ENUM_WEATHER_HAIL
|
||||
setfieldweather BATTLE_WEATHER_HAIL
|
||||
goto BattleScript_MoveWeatherChange
|
||||
|
||||
BattleScript_EffectTorment::
|
||||
@ -5822,20 +5822,18 @@ BattleScript_LearnedNewMove::
|
||||
BattleScript_LearnMoveReturn::
|
||||
return
|
||||
|
||||
BattleScript_RainContinuesOrEnds::
|
||||
printfromtable gRainContinuesStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
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::
|
||||
printfromtable gSandStormHailSnowContinuesStringIds
|
||||
BattleScript_WeatherContinues::
|
||||
printfromtable gWeatherTurnStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
playanimation_var BS_ATTACKER, sB_ANIM_ARG1
|
||||
setbyte gBattleCommunication, 0
|
||||
call BattleScript_ActivateWeatherAbilities
|
||||
end2
|
||||
|
||||
BattleScript_WeatherFaded::
|
||||
printfromtable gWeatherEndsStringIds
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
call BattleScript_ActivateWeatherAbilities
|
||||
end2
|
||||
|
||||
BattleScript_DamagingWeather::
|
||||
@ -5845,6 +5843,12 @@ BattleScript_DamagingWeather::
|
||||
hitanimation BS_SCRIPTING
|
||||
goto BattleScript_DoTurnDmg
|
||||
|
||||
BattleScript_FogEnded_Ret::
|
||||
printstring STRINGID_FOGLIFTED
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
call BattleScript_ActivateWeatherAbilities
|
||||
return
|
||||
|
||||
BattleScript_IceBodyHeal::
|
||||
call BattleScript_AbilityPopUpScripting
|
||||
playanimation BS_SCRIPTING, B_ANIM_SIMPLE_HEAL
|
||||
@ -5854,42 +5858,6 @@ BattleScript_IceBodyHeal::
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
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_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
|
||||
@ -10035,7 +10003,7 @@ BattleScript_EffectSnow::
|
||||
attackstring
|
||||
ppreduce
|
||||
call BattleScript_CheckPrimalWeather
|
||||
setfieldweather ENUM_WEATHER_SNOW
|
||||
setfieldweather BATTLE_WEATHER_SNOW
|
||||
goto BattleScript_MoveWeatherChange
|
||||
|
||||
BattleScript_SleepClauseBlocked::
|
||||
|
||||
@ -50,17 +50,12 @@ extern const u8 BattleScript_DoSwitchOut[];
|
||||
extern const u8 BattleScript_MoveSwitchOpenPartyScreen[];
|
||||
extern const u8 BattleScript_Pausex20[];
|
||||
extern const u8 BattleScript_LevelUp[];
|
||||
extern const u8 BattleScript_RainContinuesOrEnds[];
|
||||
extern const u8 BattleScript_SnowContinuesOrEnds[];
|
||||
extern const u8 BattleScript_WeatherContinues[];
|
||||
extern const u8 BattleScript_WeatherFaded[];
|
||||
extern const u8 BattleScript_DamagingWeatherContinues[];
|
||||
extern const u8 BattleScript_DamagingWeather[];
|
||||
extern const u8 BattleScript_IceBodyHeal[];
|
||||
extern const u8 BattleScript_SandStormHailSnowEnds[];
|
||||
extern const u8 BattleScript_SunlightContinues[];
|
||||
extern const u8 BattleScript_SunlightFaded[];
|
||||
extern const u8 BattleScript_FogContinues[];
|
||||
extern const u8 BattleScript_FogEnded_Ret[];
|
||||
extern const u8 BattleScript_FogEnded[];
|
||||
extern const u8 BattleScript_IceBodyHeal[];
|
||||
extern const u8 BattleScript_OverworldStatusStarts[];
|
||||
extern const u8 BattleScript_OverworldWeatherStarts[];
|
||||
extern const u8 BattleScript_OverworldTerrain[];
|
||||
|
||||
@ -206,7 +206,7 @@ void TryClearRageAndFuryCutter(void);
|
||||
u32 AtkCanceller_MoveSuccessOrder(void);
|
||||
void SetAtkCancellerForCalledMove(void);
|
||||
bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2);
|
||||
bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility);
|
||||
bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility);
|
||||
u32 CanAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef);
|
||||
u32 CanPartnerAbilityBlockMove(u32 battlerAtk, u32 battlerDef, u32 move, u32 abilityDef);
|
||||
u32 CanAbilityAbsorbMove(u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 move, u32 moveType);
|
||||
|
||||
@ -282,44 +282,38 @@
|
||||
#define MOVE_RESULT_FOE_ENDURED_AFFECTION (1 << 9)
|
||||
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
|
||||
|
||||
// Battle Weather flags
|
||||
#define B_WEATHER_NONE 0
|
||||
#define B_WEATHER_RAIN_TEMPORARY (1 << 0)
|
||||
#define B_WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
|
||||
#define B_WEATHER_RAIN_PERMANENT (1 << 2)
|
||||
#define B_WEATHER_RAIN_PRIMAL (1 << 3)
|
||||
#define B_WEATHER_RAIN (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_DOWNPOUR | B_WEATHER_RAIN_PERMANENT | B_WEATHER_RAIN_PRIMAL)
|
||||
#define B_WEATHER_SANDSTORM_TEMPORARY (1 << 4)
|
||||
#define B_WEATHER_SANDSTORM_PERMANENT (1 << 5)
|
||||
#define B_WEATHER_SANDSTORM (B_WEATHER_SANDSTORM_TEMPORARY | B_WEATHER_SANDSTORM_PERMANENT)
|
||||
#define B_WEATHER_SUN_TEMPORARY (1 << 6)
|
||||
#define B_WEATHER_SUN_PERMANENT (1 << 7)
|
||||
#define B_WEATHER_SUN_PRIMAL (1 << 8)
|
||||
#define B_WEATHER_SUN (B_WEATHER_SUN_TEMPORARY | B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_PRIMAL)
|
||||
#define B_WEATHER_HAIL_TEMPORARY (1 << 9)
|
||||
#define B_WEATHER_HAIL_PERMANENT (1 << 10)
|
||||
#define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY | B_WEATHER_HAIL_PERMANENT)
|
||||
#define B_WEATHER_STRONG_WINDS (1 << 11)
|
||||
#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG)
|
||||
#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS)
|
||||
#define B_WEATHER_SNOW_TEMPORARY (1 << 12)
|
||||
#define B_WEATHER_SNOW_PERMANENT (1 << 13)
|
||||
#define B_WEATHER_SNOW (B_WEATHER_SNOW_TEMPORARY | B_WEATHER_SNOW_PERMANENT)
|
||||
#define B_WEATHER_FOG_TEMPORARY (1 << 14)
|
||||
#define B_WEATHER_FOG_PERMANENT (1 << 15)
|
||||
#define B_WEATHER_FOG (B_WEATHER_FOG_TEMPORARY | B_WEATHER_FOG_PERMANENT)
|
||||
enum BattleWeather
|
||||
{
|
||||
BATTLE_WEATHER_RAIN,
|
||||
BATTLE_WEATHER_RAIN_PRIMAL,
|
||||
BATTLE_WEATHER_RAIN_DOWNPOUR,
|
||||
BATTLE_WEATHER_SUN,
|
||||
BATTLE_WEATHER_SUN_PRIMAL,
|
||||
BATTLE_WEATHER_SANDSTORM,
|
||||
BATTLE_WEATHER_HAIL,
|
||||
BATTLE_WEATHER_SNOW,
|
||||
BATTLE_WEATHER_FOG,
|
||||
BATTLE_WEATHER_STRONG_WINDS,
|
||||
BATTLE_WEATHER_COUNT,
|
||||
};
|
||||
|
||||
// Battle Weather as enum
|
||||
#define ENUM_WEATHER_NONE 0
|
||||
#define ENUM_WEATHER_RAIN 1
|
||||
#define ENUM_WEATHER_SUN 2
|
||||
#define ENUM_WEATHER_SANDSTORM 3
|
||||
#define ENUM_WEATHER_HAIL 4
|
||||
#define ENUM_WEATHER_SUN_PRIMAL 5
|
||||
#define ENUM_WEATHER_RAIN_PRIMAL 6
|
||||
#define ENUM_WEATHER_STRONG_WINDS 7
|
||||
#define ENUM_WEATHER_SNOW 8
|
||||
#define ENUM_WEATHER_FOG 9
|
||||
// Battle Weather flags
|
||||
#define B_WEATHER_NONE 0
|
||||
#define B_WEATHER_RAIN_NORMAL (1 << BATTLE_WEATHER_RAIN)
|
||||
#define B_WEATHER_RAIN_PRIMAL (1 << BATTLE_WEATHER_RAIN_PRIMAL)
|
||||
#define B_WEATHER_RAIN_DOWNPOUR (1 << BATTLE_WEATHER_RAIN_DOWNPOUR) // unused
|
||||
#define B_WEATHER_RAIN (B_WEATHER_RAIN_NORMAL | B_WEATHER_RAIN_PRIMAL | B_WEATHER_RAIN_DOWNPOUR)
|
||||
#define B_WEATHER_SUN_NORMAL (1 << BATTLE_WEATHER_SUN)
|
||||
#define B_WEATHER_SUN_PRIMAL (1 << BATTLE_WEATHER_SUN_PRIMAL)
|
||||
#define B_WEATHER_SUN (B_WEATHER_SUN_NORMAL | B_WEATHER_SUN_PRIMAL)
|
||||
#define B_WEATHER_SANDSTORM (1 << BATTLE_WEATHER_SANDSTORM)
|
||||
#define B_WEATHER_HAIL (1 << BATTLE_WEATHER_HAIL)
|
||||
#define B_WEATHER_SNOW (1 << BATTLE_WEATHER_SNOW)
|
||||
#define B_WEATHER_FOG (1 << BATTLE_WEATHER_FOG)
|
||||
#define B_WEATHER_STRONG_WINDS (1 << BATTLE_WEATHER_STRONG_WINDS)
|
||||
|
||||
#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG)
|
||||
#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS)
|
||||
|
||||
// Move Effects
|
||||
#define MOVE_EFFECT_SLEEP 1
|
||||
|
||||
@ -784,14 +784,25 @@
|
||||
|
||||
// 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_SUN 1
|
||||
#define B_MSG_WEATHER_END_SANDSTORM 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_SNOW 4
|
||||
#define B_MSG_WEATHER_END_FOG 5
|
||||
#define B_MSG_WEATHER_END_STRONG_WINDS 6
|
||||
#define B_MSG_WEATHER_END_COUNT 7
|
||||
|
||||
// gWeatherTurnStringIds
|
||||
#define B_MSG_WEATHER_TURN_RAIN 0
|
||||
#define B_MSG_WEATHER_TURN_DOWNPOUR 1
|
||||
#define B_MSG_WEATHER_TURN_SUN 2
|
||||
#define B_MSG_WEATHER_TURN_SANDSTORM 3
|
||||
#define B_MSG_WEATHER_TURN_HAIL 4
|
||||
#define B_MSG_WEATHER_TURN_SNOW 5
|
||||
#define B_MSG_WEATHER_TURN_FOG 6
|
||||
#define B_MSG_WEATHER_TURN_STRONG_WINDS 7
|
||||
#define B_MSG_WEATHER_TURN_COUNT 8
|
||||
|
||||
// gRainContinuesStringIds
|
||||
#define B_MSG_RAIN_CONTINUES 0
|
||||
#define B_MSG_DOWNPOUR_CONTINUES 1
|
||||
|
||||
@ -589,19 +589,19 @@ void BS_SetMaxMoveEffect(void)
|
||||
switch (maxEffect)
|
||||
{
|
||||
case MAX_EFFECT_SUN:
|
||||
weather = ENUM_WEATHER_SUN;
|
||||
weather = BATTLE_WEATHER_SUN;
|
||||
msg = B_MSG_STARTED_SUNLIGHT;
|
||||
break;
|
||||
case MAX_EFFECT_RAIN:
|
||||
weather = ENUM_WEATHER_RAIN;
|
||||
weather = BATTLE_WEATHER_RAIN;
|
||||
msg = B_MSG_STARTED_RAIN;
|
||||
break;
|
||||
case MAX_EFFECT_SANDSTORM:
|
||||
weather = ENUM_WEATHER_SANDSTORM;
|
||||
weather = BATTLE_WEATHER_SANDSTORM;
|
||||
msg = B_MSG_STARTED_SANDSTORM;
|
||||
break;
|
||||
case MAX_EFFECT_HAIL:
|
||||
weather = ENUM_WEATHER_HAIL;
|
||||
weather = BATTLE_WEATHER_HAIL;
|
||||
msg = B_MSG_STARTED_HAIL;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1015,20 +1015,25 @@ const u16 gMoveWeatherChangeStringIds[] =
|
||||
|
||||
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_RAIN] = STRINGID_RAINSTOPPED,
|
||||
[B_MSG_WEATHER_END_SUN] = STRINGID_SUNLIGHTFADED,
|
||||
[B_MSG_WEATHER_END_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED,
|
||||
[B_MSG_WEATHER_END_HAIL] = STRINGID_HAILSTOPPED,
|
||||
[B_MSG_WEATHER_END_SNOW] = STRINGID_SNOWSTOPPED,
|
||||
[B_MSG_WEATHER_END_FOG] = STRINGID_FOGLIFTED,
|
||||
[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[] =
|
||||
const u16 gWeatherTurnStringIds[] =
|
||||
{
|
||||
[B_MSG_SANDSTORM] = STRINGID_SANDSTORMRAGES,
|
||||
[B_MSG_HAIL] = STRINGID_HAILCONTINUES,
|
||||
[B_MSG_SNOW] = STRINGID_SNOWCONTINUES,
|
||||
[B_MSG_WEATHER_TURN_RAIN] = STRINGID_RAINCONTINUES,
|
||||
[B_MSG_WEATHER_TURN_DOWNPOUR] = STRINGID_DOWNPOURCONTINUES,
|
||||
[B_MSG_WEATHER_TURN_SUN] = STRINGID_SUNLIGHTSTRONG,
|
||||
[B_MSG_WEATHER_TURN_SANDSTORM] = STRINGID_SANDSTORMRAGES,
|
||||
[B_MSG_WEATHER_TURN_HAIL] = STRINGID_HAILCONTINUES,
|
||||
[B_MSG_WEATHER_TURN_SNOW] = STRINGID_SNOWCONTINUES,
|
||||
[B_MSG_WEATHER_TURN_FOG] = STRINGID_FOGISDEEP,
|
||||
[B_MSG_WEATHER_TURN_STRONG_WINDS] = STRINGID_MYSTERIOUSAIRCURRENTBLOWSON,
|
||||
};
|
||||
|
||||
const u16 gSandStormHailDmgStringIds[] =
|
||||
@ -1037,20 +1042,6 @@ const u16 gSandStormHailDmgStringIds[] =
|
||||
[B_MSG_HAIL] = STRINGID_PKMNPELTEDBYHAIL
|
||||
};
|
||||
|
||||
const u16 gSandStormHailSnowEndStringIds[] =
|
||||
{
|
||||
[B_MSG_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED,
|
||||
[B_MSG_HAIL] = STRINGID_HAILSTOPPED,
|
||||
[B_MSG_SNOW] = STRINGID_SNOWSTOPPED,
|
||||
};
|
||||
|
||||
const u16 gRainContinuesStringIds[] =
|
||||
{
|
||||
[B_MSG_RAIN_CONTINUES] = STRINGID_RAINCONTINUES,
|
||||
[B_MSG_DOWNPOUR_CONTINUES] = STRINGID_DOWNPOURCONTINUES,
|
||||
[B_MSG_RAIN_STOPPED] = STRINGID_RAINSTOPPED
|
||||
};
|
||||
|
||||
const u16 gProtectLikeUsedStringIds[] =
|
||||
{
|
||||
[B_MSG_PROTECTED_ITSELF] = STRINGID_PKMNPROTECTEDITSELF2,
|
||||
|
||||
@ -11605,9 +11605,9 @@ static void Cmd_setfieldweather(void)
|
||||
{
|
||||
CMD_ARGS(u8 weather);
|
||||
|
||||
u8 weather = cmd->weather;
|
||||
u8 battleWeatherId = cmd->weather;
|
||||
|
||||
if (!TryChangeBattleWeather(gBattlerAttacker, weather, FALSE))
|
||||
if (!TryChangeBattleWeather(gBattlerAttacker, battleWeatherId, FALSE))
|
||||
{
|
||||
gBattleStruct->moveResultFlags[gBattlerTarget] |= MOVE_RESULT_MISSED;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
|
||||
@ -11615,21 +11615,21 @@ static void Cmd_setfieldweather(void)
|
||||
return;
|
||||
}
|
||||
|
||||
switch (weather)
|
||||
switch (battleWeatherId)
|
||||
{
|
||||
case ENUM_WEATHER_RAIN:
|
||||
case BATTLE_WEATHER_RAIN:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN;
|
||||
break;
|
||||
case ENUM_WEATHER_SUN:
|
||||
case BATTLE_WEATHER_SUN:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT;
|
||||
break;
|
||||
case ENUM_WEATHER_SANDSTORM:
|
||||
case BATTLE_WEATHER_SANDSTORM:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM;
|
||||
break;
|
||||
case ENUM_WEATHER_HAIL:
|
||||
case BATTLE_WEATHER_HAIL:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL;
|
||||
break;
|
||||
case ENUM_WEATHER_SNOW:
|
||||
case BATTLE_WEATHER_SNOW:
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -96,6 +96,109 @@ static const u8 sPkblToEscapeFactor[][3] = {
|
||||
static const u8 sGoNearCounterToCatchFactor[] = {4, 3, 2, 1};
|
||||
static const u8 sGoNearCounterToEscapeFactor[] = {4, 4, 4, 4};
|
||||
|
||||
|
||||
struct BattleWeatherInfo
|
||||
{
|
||||
u16 flag;
|
||||
u8 rock;
|
||||
u8 endMessage;
|
||||
u8 continuesMessage;
|
||||
u8 animation;
|
||||
};
|
||||
|
||||
static const struct BattleWeatherInfo sBattleWeatherInfo[BATTLE_WEATHER_COUNT] =
|
||||
{
|
||||
[BATTLE_WEATHER_RAIN] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_RAIN,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_RAIN_DOWNPOUR] =
|
||||
{
|
||||
.flag = B_WEATHER_RAIN_NORMAL,
|
||||
.rock = HOLD_EFFECT_DAMP_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_RAIN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_DOWNPOUR,
|
||||
.animation = B_ANIM_RAIN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_NORMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SUN_PRIMAL] =
|
||||
{
|
||||
.flag = B_WEATHER_SUN_PRIMAL,
|
||||
.rock = HOLD_EFFECT_HEAT_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SUN,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SUN,
|
||||
.animation = B_ANIM_SUN_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SANDSTORM] =
|
||||
{
|
||||
.flag = B_WEATHER_SANDSTORM,
|
||||
.rock = HOLD_EFFECT_SMOOTH_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SANDSTORM,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SANDSTORM,
|
||||
.animation = B_ANIM_SANDSTORM_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_HAIL] =
|
||||
{
|
||||
.flag = B_WEATHER_HAIL,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_HAIL,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_HAIL,
|
||||
.animation = B_ANIM_HAIL_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_SNOW] =
|
||||
{
|
||||
.flag = B_WEATHER_SNOW,
|
||||
.rock = HOLD_EFFECT_ICY_ROCK,
|
||||
.endMessage = B_MSG_WEATHER_END_SNOW,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_SNOW,
|
||||
.animation = B_ANIM_SNOW_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_FOG] =
|
||||
{
|
||||
.flag = B_WEATHER_FOG,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_FOG,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_FOG,
|
||||
.animation = B_ANIM_FOG_CONTINUES,
|
||||
},
|
||||
|
||||
[BATTLE_WEATHER_STRONG_WINDS] =
|
||||
{
|
||||
.flag = B_WEATHER_STRONG_WINDS,
|
||||
.rock = HOLD_EFFECT_NONE,
|
||||
.endMessage = B_MSG_WEATHER_END_STRONG_WINDS,
|
||||
.continuesMessage = B_MSG_WEATHER_TURN_STRONG_WINDS,
|
||||
.animation = B_ANIM_STRONG_WINDS,
|
||||
},
|
||||
};
|
||||
|
||||
static u8 CalcBeatUpPower(void)
|
||||
{
|
||||
u8 basePower;
|
||||
@ -1524,12 +1627,7 @@ enum
|
||||
ENDTURN_SAFEGUARD,
|
||||
ENDTURN_TAILWIND,
|
||||
ENDTURN_WISH,
|
||||
ENDTURN_RAIN,
|
||||
ENDTURN_SANDSTORM,
|
||||
ENDTURN_SUN,
|
||||
ENDTURN_HAIL,
|
||||
ENDTURN_SNOW,
|
||||
ENDTURN_FOG,
|
||||
ENDTURN_WEATHER,
|
||||
ENDTURN_DAMAGE_NON_TYPES,
|
||||
ENDTURN_GRAVITY,
|
||||
ENDTURN_WATER_SPORT,
|
||||
@ -1571,6 +1669,44 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 TryEndTurnWeather(void)
|
||||
{
|
||||
u32 i = 0;
|
||||
u32 effect = 0;
|
||||
u32 currBattleWeather = 0xFF;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(sBattleWeatherInfo); i++)
|
||||
{
|
||||
if (gBattleWeather & sBattleWeatherInfo[i].flag)
|
||||
{
|
||||
currBattleWeather = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (currBattleWeather == 0xFF)
|
||||
return effect;
|
||||
|
||||
if (gWishFutureKnock.weatherDuration > 0 && --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather = B_WEATHER_NONE;
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
gDisableStructs[i].weatherAbilityDone = FALSE;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = sBattleWeatherInfo[currBattleWeather].endMessage;
|
||||
BattleScriptExecute(BattleScript_WeatherFaded);
|
||||
effect++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = sBattleWeatherInfo[currBattleWeather].continuesMessage;
|
||||
gBattleScripting.animArg1 = sBattleWeatherInfo[currBattleWeather].animation;
|
||||
BattleScriptExecute(BattleScript_WeatherContinues);
|
||||
effect++;
|
||||
}
|
||||
|
||||
return effect;
|
||||
}
|
||||
|
||||
u8 DoFieldEndTurnEffects(void)
|
||||
{
|
||||
u8 effect = 0;
|
||||
@ -1798,139 +1934,8 @@ u8 DoFieldEndTurnEffects(void)
|
||||
gBattleStruct->turnSideTracker = 0;
|
||||
}
|
||||
break;
|
||||
case ENDTURN_RAIN:
|
||||
if (gBattleWeather & B_WEATHER_RAIN)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_RAIN_PERMANENT)
|
||||
&& !(gBattleWeather & B_WEATHER_RAIN_PRIMAL))
|
||||
{
|
||||
if (--gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_RAIN_TEMPORARY;
|
||||
gBattleWeather &= ~B_WEATHER_RAIN_DOWNPOUR;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_STOPPED;
|
||||
}
|
||||
else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES;
|
||||
}
|
||||
}
|
||||
else if (gBattleWeather & B_WEATHER_RAIN_DOWNPOUR)
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_DOWNPOUR_CONTINUES;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_RAIN_CONTINUES;
|
||||
}
|
||||
|
||||
BattleScriptExecute(BattleScript_RainContinuesOrEnds);
|
||||
effect++;
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_SANDSTORM:
|
||||
if (gBattleWeather & B_WEATHER_SANDSTORM)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_SANDSTORM_TEMPORARY;
|
||||
gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
|
||||
}
|
||||
|
||||
gBattleScripting.animArg1 = B_ANIM_SANDSTORM_CONTINUES;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SANDSTORM;
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
effect++;
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_SUN:
|
||||
if (gBattleWeather & B_WEATHER_SUN)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_SUN_PERMANENT)
|
||||
&& !(gBattleWeather & B_WEATHER_SUN_PRIMAL)
|
||||
&& --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_SUN_TEMPORARY;
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
gDisableStructs[i].weatherAbilityDone = FALSE;
|
||||
gBattlescriptCurrInstr = BattleScript_SunlightFaded;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_SunlightContinues;
|
||||
}
|
||||
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
effect++;
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_HAIL:
|
||||
if (gBattleWeather & B_WEATHER_HAIL)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_HAIL_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_HAIL_TEMPORARY;
|
||||
gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
|
||||
}
|
||||
|
||||
gBattleScripting.animArg1 = B_ANIM_HAIL_CONTINUES;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_HAIL;
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
effect++;
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_SNOW:
|
||||
if (gBattleWeather & B_WEATHER_SNOW)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_SNOW_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_SNOW_TEMPORARY;
|
||||
gBattlescriptCurrInstr = BattleScript_SandStormHailSnowEnds;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues;
|
||||
}
|
||||
|
||||
gBattleScripting.animArg1 = B_ANIM_SNOW_CONTINUES;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SNOW;
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
effect++;
|
||||
}
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_FOG:
|
||||
if (gBattleWeather & B_WEATHER_FOG)
|
||||
{
|
||||
if (!(gBattleWeather & B_WEATHER_FOG_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
|
||||
{
|
||||
gBattleWeather &= ~B_WEATHER_FOG_TEMPORARY;
|
||||
gBattlescriptCurrInstr = BattleScript_FogEnded;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlescriptCurrInstr = BattleScript_FogContinues;
|
||||
}
|
||||
|
||||
BattleScriptExecute(gBattlescriptCurrInstr);
|
||||
effect++;
|
||||
}
|
||||
case ENDTURN_WEATHER:
|
||||
effect = TryEndTurnWeather();
|
||||
gBattleStruct->turnCountersTracker++;
|
||||
break;
|
||||
case ENDTURN_DAMAGE_NON_TYPES:
|
||||
@ -2252,6 +2257,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16;
|
||||
if (gBattleStruct->moveDamage[battler] == 0)
|
||||
gBattleStruct->moveDamage[battler] = 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SANDSTORM;
|
||||
BattleScriptExecute(BattleScript_DamagingWeather);
|
||||
effect++;
|
||||
}
|
||||
@ -2278,6 +2284,7 @@ u8 DoBattlerEndTurnEffects(void)
|
||||
gBattleStruct->moveDamage[battler] = GetNonDynamaxMaxHP(battler) / 16;
|
||||
if (gBattleStruct->moveDamage[battler] == 0)
|
||||
gBattleStruct->moveDamage[battler] = 1;
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_HAIL;
|
||||
BattleScriptExecute(BattleScript_DamagingWeather);
|
||||
effect++;
|
||||
}
|
||||
@ -4010,43 +4017,39 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2
|
||||
}
|
||||
}
|
||||
|
||||
static const u16 sWeatherFlagsInfo[][3] =
|
||||
{
|
||||
[ENUM_WEATHER_RAIN] = {B_WEATHER_RAIN_TEMPORARY, B_WEATHER_RAIN_PERMANENT, HOLD_EFFECT_DAMP_ROCK},
|
||||
[ENUM_WEATHER_RAIN_PRIMAL] = {B_WEATHER_RAIN_PRIMAL, B_WEATHER_RAIN_PRIMAL, HOLD_EFFECT_DAMP_ROCK},
|
||||
[ENUM_WEATHER_SUN] = {B_WEATHER_SUN_TEMPORARY, B_WEATHER_SUN_PERMANENT, HOLD_EFFECT_HEAT_ROCK},
|
||||
[ENUM_WEATHER_SUN_PRIMAL] = {B_WEATHER_SUN_PRIMAL, B_WEATHER_SUN_PRIMAL, HOLD_EFFECT_HEAT_ROCK},
|
||||
[ENUM_WEATHER_SANDSTORM] = {B_WEATHER_SANDSTORM_TEMPORARY, B_WEATHER_SANDSTORM_PERMANENT, HOLD_EFFECT_SMOOTH_ROCK},
|
||||
[ENUM_WEATHER_HAIL] = {B_WEATHER_HAIL_TEMPORARY, B_WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK},
|
||||
[ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE},
|
||||
[ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK},
|
||||
[ENUM_WEATHER_FOG] = {B_WEATHER_FOG_TEMPORARY, B_WEATHER_FOG_PERMANENT, HOLD_EFFECT_NONE},
|
||||
};
|
||||
|
||||
bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility)
|
||||
bool32 TryChangeBattleWeather(u32 battler, u32 battleWeatherId, bool32 viaAbility)
|
||||
{
|
||||
u16 battlerAbility = GetBattlerAbility(battler);
|
||||
if (gBattleWeather & B_WEATHER_PRIMAL_ANY
|
||||
|
||||
if (gBattleWeather & sBattleWeatherInfo[battleWeatherId].flag)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (gBattleWeather & B_WEATHER_PRIMAL_ANY
|
||||
&& battlerAbility != ABILITY_DESOLATE_LAND
|
||||
&& battlerAbility != ABILITY_PRIMORDIAL_SEA
|
||||
&& battlerAbility != ABILITY_DELTA_STREAM)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (B_ABILITY_WEATHER < GEN_6 && viaAbility && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1]))
|
||||
else if (B_ABILITY_WEATHER < GEN_6 && viaAbility)
|
||||
{
|
||||
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]);
|
||||
gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag;
|
||||
return TRUE;
|
||||
}
|
||||
else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1])))
|
||||
else
|
||||
{
|
||||
gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0]);
|
||||
if (GetBattlerHoldEffect(battler, TRUE) == sWeatherFlagsInfo[weatherEnumId][2])
|
||||
u32 rock = sBattleWeatherInfo[battleWeatherId].rock;
|
||||
gBattleWeather = sBattleWeatherInfo[battleWeatherId].flag;
|
||||
if (gBattleWeather & B_WEATHER_PRIMAL_ANY)
|
||||
gWishFutureKnock.weatherDuration = 0;
|
||||
if (rock != 0 && GetBattlerHoldEffect(battler, TRUE) == rock)
|
||||
gWishFutureKnock.weatherDuration = 8;
|
||||
else
|
||||
gWishFutureKnock.weatherDuration = 5;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -4551,7 +4554,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case WEATHER_DOWNPOUR:
|
||||
if (!(gBattleWeather & B_WEATHER_RAIN))
|
||||
{
|
||||
gBattleWeather = (B_WEATHER_RAIN_TEMPORARY | B_WEATHER_RAIN_PERMANENT);
|
||||
gBattleWeather = B_WEATHER_RAIN_NORMAL;
|
||||
gBattleScripting.animArg1 = B_ANIM_RAIN_CONTINUES;
|
||||
effect++;
|
||||
}
|
||||
@ -4567,7 +4570,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
case WEATHER_DROUGHT:
|
||||
if (!(gBattleWeather & B_WEATHER_SUN))
|
||||
{
|
||||
gBattleWeather = (B_WEATHER_SUN_PERMANENT | B_WEATHER_SUN_TEMPORARY);
|
||||
gBattleWeather = B_WEATHER_SUN_NORMAL;
|
||||
gBattleScripting.animArg1 = B_ANIM_SUN_CONTINUES;
|
||||
effect++;
|
||||
}
|
||||
@ -4883,7 +4886,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_DRIZZLE:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates);
|
||||
effect++;
|
||||
@ -4896,7 +4899,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_SAND_STREAM:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates);
|
||||
effect++;
|
||||
@ -4909,7 +4912,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_DROUGHT:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
|
||||
effect++;
|
||||
@ -4922,12 +4925,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_SNOW_WARNING:
|
||||
if (B_SNOW_WARNING >= GEN_9 && TryChangeBattleWeather(battler, ENUM_WEATHER_SNOW, TRUE))
|
||||
if (B_SNOW_WARNING >= GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_SNOW, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesSnow);
|
||||
effect++;
|
||||
}
|
||||
else if (B_SNOW_WARNING < GEN_9 && TryChangeBattleWeather(battler, ENUM_WEATHER_HAIL, TRUE))
|
||||
else if (B_SNOW_WARNING < GEN_9 && TryChangeBattleWeather(battler, BATTLE_WEATHER_HAIL, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_SnowWarningActivatesHail);
|
||||
effect++;
|
||||
@ -5061,21 +5064,21 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_DESOLATE_LAND:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN_PRIMAL, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN_PRIMAL, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_DesolateLandActivates);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_PRIMORDIAL_SEA:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_RAIN_PRIMAL, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_RAIN_PRIMAL, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_PrimordialSeaActivates);
|
||||
effect++;
|
||||
}
|
||||
break;
|
||||
case ABILITY_DELTA_STREAM:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_STRONG_WINDS, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_STRONG_WINDS, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_DeltaStreamActivates);
|
||||
effect++;
|
||||
@ -5118,7 +5121,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_ORICHALCUM_PULSE:
|
||||
if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN, TRUE))
|
||||
if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SUN, TRUE))
|
||||
{
|
||||
BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates);
|
||||
effect++;
|
||||
@ -6065,7 +6068,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
gBattlescriptCurrInstr = BattleScript_BlockedByPrimalWeatherRet;
|
||||
effect++;
|
||||
}
|
||||
else if (TryChangeBattleWeather(battler, ENUM_WEATHER_SANDSTORM, TRUE))
|
||||
else if (TryChangeBattleWeather(battler, BATTLE_WEATHER_SANDSTORM, TRUE))
|
||||
{
|
||||
gBattleScripting.battler = battler;
|
||||
BattleScriptPushCursor();
|
||||
@ -6529,12 +6532,20 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
|
||||
}
|
||||
break;
|
||||
case ABILITY_ICE_FACE:
|
||||
if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW)
|
||||
u32 battlerWeatherAffected = IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW);
|
||||
if (battlerWeatherAffected && gBattleMons[battler].species == SPECIES_EISCUE)
|
||||
{
|
||||
// If Hail/Snow activates when in Eiscue is in base, prevent reversion when Eiscue Noice gets broken
|
||||
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
||||
}
|
||||
if (!gDisableStructs[battler].weatherAbilityDone
|
||||
&& battlerWeatherAffected
|
||||
&& gBattleMons[battler].species == SPECIES_EISCUE_NOICE
|
||||
&& !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
// TODO: Convert this to a proper FORM_CHANGE type.
|
||||
gBattleScripting.battler = battler;
|
||||
gDisableStructs[battler].weatherAbilityDone = TRUE;
|
||||
gBattleMons[battler].species = SPECIES_EISCUE_ICE;
|
||||
BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3);
|
||||
effect++;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user