Opponents Shaymin Sky form correctly reverts on frozen status (#4559)

* Fixed Shaymin form change with incorrect status condition

* Fixed Shaymin receiving damage again after changing form

* PR feedback updates - fixed missing commas in battle script

* Added Shaymin form change test by @AlexOn1ine
This commit is contained in:
TheJamesLJ 2024-05-14 12:28:10 +01:00 committed by GitHub
parent 23b8804790
commit 9cd3fbb232
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 8 deletions

View File

@ -6994,6 +6994,13 @@ BattleScript_CudChewActivates::
setbyte sBERRY_OVERRIDE, 0
end3
BattleScript_ApplyDisguiseFormChangeHPLoss::
.if B_DISGUISE_HP_LOSS >= GEN_8
healthbarupdate BS_SCRIPTING
datahpupdate BS_SCRIPTING
.endif
return
BattleScript_TargetFormChangeNoPopup:
flushtextbox
handleformchange BS_SCRIPTING, 0
@ -7001,10 +7008,7 @@ BattleScript_TargetFormChangeNoPopup:
playanimation BS_TARGET, B_ANIM_FORM_CHANGE
waitanimation
handleformchange BS_SCRIPTING, 2
.if B_DISGUISE_HP_LOSS >= GEN_8
healthbarupdate BS_SCRIPTING
datahpupdate BS_SCRIPTING
.endif
jumpifability BS_TARGET, ABILITY_DISGUISE, BattleScript_ApplyDisguiseFormChangeHPLoss
return
BattleScript_TargetFormChange::

View File

@ -627,7 +627,7 @@ static const struct FormChange sShayminFormChangeTable[] = {
{FORM_CHANGE_ITEM_USE, SPECIES_SHAYMIN_SKY, ITEM_GRACIDEA, DAY},
{FORM_CHANGE_WITHDRAW, SPECIES_SHAYMIN_LAND},
{FORM_CHANGE_TIME_OF_DAY, SPECIES_SHAYMIN_LAND, NIGHT},
{FORM_CHANGE_STATUS, SPECIES_SHAYMIN_LAND, (STATUS1_FREEZE | STATUS1_FROSTBITE)},
{FORM_CHANGE_STATUS, SPECIES_SHAYMIN_LAND, STATUS1_FREEZE | STATUS1_FROSTBITE},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_SHAYMIN

View File

@ -6226,9 +6226,12 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
break;
case FORM_CHANGE_WITHDRAW:
case FORM_CHANGE_FAINT:
case FORM_CHANGE_STATUS:
targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_STATUS:
if (GetBoxMonData(boxMon, MON_DATA_STATUS, NULL) & formChanges[i].param1)
targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_TIME_OF_DAY:
switch (formChanges[i].param1)
{

View File

@ -3,13 +3,38 @@
SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitten")
{
u32 move;
PARAMETRIZE { move = MOVE_POWDER_SNOW; }
PARAMETRIZE { move = MOVE_EMBER; }
PARAMETRIZE { move = MOVE_THUNDERSHOCK; }
PARAMETRIZE { move = MOVE_POISON_STING; }
PARAMETRIZE { move = MOVE_POISON_FANG; }
ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE));
ASSUME(MoveHasAdditionalEffect(MOVE_EMBER, MOVE_EFFECT_BURN));
ASSUME(MoveHasAdditionalEffect(MOVE_THUNDERSHOCK, MOVE_EFFECT_PARALYSIS));
ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON));
ASSUME(MoveHasAdditionalEffect(MOVE_POISON_FANG, MOVE_EFFECT_TOXIC));
GIVEN {
PLAYER(SPECIES_SHAYMIN_SKY);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_POWDER_SNOW); }
TURN { MOVE(opponent, move); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, move, opponent);
if (move == MOVE_POWDER_SNOW) {
STATUS_ICON(player, freeze: TRUE);
NOT HP_BAR(player); // Regression caused by Mimikyu form change
MESSAGE("Shaymin transformed!");
} else {
NOT MESSAGE("Shaymin transformed!");
}
} THEN {
EXPECT_EQ(player->species, SPECIES_SHAYMIN_LAND);
if (move == MOVE_POWDER_SNOW)
EXPECT_EQ(player->species, SPECIES_SHAYMIN_LAND);
else
EXPECT_EQ(player->species, SPECIES_SHAYMIN_SKY);
}
}