Add status form change

This commit is contained in:
Bassoonian 2023-12-15 11:17:35 +01:00
parent c44e133d8c
commit 0fd08a32ac
8 changed files with 44 additions and 0 deletions

View File

@ -1557,6 +1557,10 @@
.4byte \failInstr
.endm
.macro trytriggerstatusform
callnative BS_TryTriggerStatusForm
.endm
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES

View File

@ -8342,6 +8342,8 @@ BattleScript_MoveEffectSleep::
BattleScript_UpdateEffectStatusIconRet::
updatestatusicon BS_EFFECT_BATTLER
waitstate
trytriggerstatusform
flushtextbox
return
BattleScript_YawnMakesAsleep::

View File

@ -116,4 +116,8 @@
// param1: multichoice list (starting at 0).
#define FORM_CHANGE_ITEM_USE_MULTICHOICE 19
// Form change that activates when inflicted with a specific status
// param1: status
#define FORM_CHANGE_STATUS 20
#endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H

View File

@ -16496,3 +16496,16 @@ void BS_TryDefog(void)
gBattlescriptCurrInstr = cmd->failInstr;
}
}
void BS_TryTriggerStatusForm(void)
{
NATIVE_ARGS();
if (TryBattleFormChange(gBattlerTarget, FORM_CHANGE_STATUS))
{
gBattleScripting.battler = gBattlerTarget;
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = BattleScript_TargetFormChangeWithStringNoPopup;
return;
}
gBattlescriptCurrInstr = cmd->nextInstr;
}

View File

@ -10494,6 +10494,10 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method)
if (formChanges[i].param1 == GetBattlerAbility(battler))
targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_STATUS:
if (gBattleMons[battler].status1 & formChanges[i].param1)
targetSpecies = formChanges[i].targetSpecies;
break;
}
}
}

View File

@ -489,6 +489,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_TERMINATOR},
};
#endif //P_FAMILY_SHAYMIN

View File

@ -5821,6 +5821,7 @@ 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_TIME_OF_DAY:

View File

@ -0,0 +1,15 @@
#include "global.h"
#include "test/battle.h"
SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitten")
{
ASSUME(gBattleMoves[MOVE_POWDER_SNOW].effect == ((B_USE_FROSTBITE == TRUE) ? EFFECT_FROSTBITE_HIT : EFFECT_FREEZE_HIT));
GIVEN {
PLAYER(SPECIES_SHAYMIN_SKY);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(opponent, MOVE_POWDER_SNOW); }
} THEN {
EXPECT_EQ(player->species, SPECIES_SHAYMIN_LAND);
}
}