Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/battle_util.c b/src/battle_util.c
- index e4b70e02b..e586ebd56 100644
- --- a/src/battle_util.c
- +++ b/src/battle_util.c
- @@ -3995,9 +3995,12 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer)
- static bool32 ShouldChangeFormHpBased(u32 battler)
- {
- - // Ability, form >, form <=, hp divided
- - static const u16 forms[][4] =
- + // Ability, form >, form <=, hp divided, extra argument
- + static const u16 forms[][5] =
- {
- + {ABILITY_FORECAST, SPECIES_CASTFORM, SPECIES_CASTFORM_SUNNY, 1, B_WEATHER_SUN},
- + {ABILITY_FORECAST, SPECIES_CASTFORM, SPECIES_CASTFORM_RAINY, 1, B_WEATHER_RAIN},
- + {ABILITY_FORECAST, SPECIES_CASTFORM, SPECIES_CASTFORM_SNOWY, 1, B_WEATHER_HAIL},
- {ABILITY_ZEN_MODE, SPECIES_DARMANITAN, SPECIES_DARMANITAN_ZEN_MODE, 2},
- {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR, SPECIES_MINIOR_CORE_RED, 2},
- {ABILITY_SHIELDS_DOWN, SPECIES_MINIOR_METEOR_BLUE, SPECIES_MINIOR_CORE_BLUE, 2},
- @@ -4013,10 +4016,22 @@ static bool32 ShouldChangeFormHpBased(u32 battler)
- };
- u32 i;
- u16 battlerAbility = GetBattlerAbility(battler);
- + u32 currSpecies;
- + struct Pokemon *party = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
- + currSpecies = GetMonData(&party[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES, NULL);
- for (i = 0; i < ARRAY_COUNT(forms); i++)
- {
- - if (battlerAbility == forms[i][0])
- + if (battlerAbility == forms[i][0] && currSpecies == SPECIES_CASTFORM)
- + {
- + if (gBattleMons[battler].species == forms[i][1]
- + && gBattleWeather & forms[i][4])
- + {
- + gBattleMons[battler].species = forms[i][2];
- + return TRUE;
- + }
- + }
- + else if (battlerAbility == forms[i][0])
- {
- if (gBattleMons[battler].species == forms[i][2]
- && gBattleMons[battler].hp > gBattleMons[battler].maxHP / forms[i][3])
- @@ -4524,6 +4539,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
- }
- break;
- case ABILITY_FORECAST:
- + if (ShouldChangeFormHpBased(battler))
- + {
- + BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeEnd3);
- + effect++;
- + }
- + break;
- case ABILITY_FLOWER_GIFT:
- effect = TryWeatherFormChange(battler);
- if (effect)
- @@ -5602,21 +5623,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
- }
- break;
- case ABILITYEFFECT_FORECAST: // 6
- - for (battler = 0; battler < gBattlersCount; battler++)
- - {
- - u16 battlerAbility = GetBattlerAbility(battler);
- - if (battlerAbility == ABILITY_FORECAST || battlerAbility == ABILITY_FLOWER_GIFT)
- - {
- - effect = TryWeatherFormChange(battler);
- - if (effect)
- - {
- - BattleScriptPushCursorAndCallback(BattleScript_CastformChange);
- - gBattleScripting.battler = battler;
- - gBattleStruct->formToChangeInto = effect - 1;
- - return effect;
- - }
- - }
- - }
- break;
- case ABILITYEFFECT_SYNCHRONIZE:
- if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
- @@ -9401,7 +9407,9 @@ void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
- static const u16 species[][3] =
- {
- // Changed Form ID Default Form ID Should change on switch
- + {SPECIES_CASTFORM_SUNNY, SPECIES_CASTFORM, FALSE},
- + {SPECIES_CASTFORM_RAINY, SPECIES_CASTFORM, FALSE},
- + {SPECIES_CASTFORM_SNOWY, SPECIES_CASTFORM, FALSE},
- {SPECIES_MIMIKYU_BUSTED, SPECIES_MIMIKYU, FALSE},
- {SPECIES_GRENINJA_ASH, SPECIES_GRENINJA_BATTLE_BOND, FALSE},
- {SPECIES_MELOETTA_PIROUETTE, SPECIES_MELOETTA, FALSE},
- {SPECIES_AEGISLASH_BLADE, SPECIES_AEGISLASH, TRUE},
Add Comment
Please, Sign In to add comment