Add status form change
This commit is contained in:
parent
c44e133d8c
commit
0fd08a32ac
@ -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
|
||||
|
||||
@ -8342,6 +8342,8 @@ BattleScript_MoveEffectSleep::
|
||||
BattleScript_UpdateEffectStatusIconRet::
|
||||
updatestatusicon BS_EFFECT_BATTLER
|
||||
waitstate
|
||||
trytriggerstatusform
|
||||
flushtextbox
|
||||
return
|
||||
|
||||
BattleScript_YawnMakesAsleep::
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
15
test/battle/form_change/status.c
Normal file
15
test/battle/form_change/status.c
Normal 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);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user