Merge branch 'master' of https://github.com/rh-hideout/pokeemerald-expansion into rh-hideout-master
This commit is contained in:
commit
c80ee88388
@ -1541,10 +1541,10 @@ BattleScript_EffectInstruct::
|
||||
tryinstruct BattleScript_ButItFailed
|
||||
attackanimation
|
||||
waitanimation
|
||||
copybyte gBattlerAttacker, gBattlerTarget
|
||||
copybyte gBattlerTarget, gEffectBattler
|
||||
printstring STRINGID_USEDINSTRUCTEDMOVE
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
copybyte gBattlerAttacker, gBattlerTarget
|
||||
copybyte gBattlerTarget, gEffectBattler
|
||||
jumptocalledmove TRUE
|
||||
|
||||
BattleScript_EffectAutotomize::
|
||||
|
||||
@ -666,7 +666,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
|
||||
[STRINGID_SWEETVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}\n因甜幕而不会睡着!"),
|
||||
[STRINGID_AROMAVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}\n正受到芳香幕的保护!"),
|
||||
[STRINGID_CELEBRATEMESSAGE] = COMPOUND_STRING("恭喜恭喜!\n{B_PLAYER_NAME}!"),
|
||||
[STRINGID_USEDINSTRUCTEDMOVE] = COMPOUND_STRING("根据{B_SCR_NAME_WITH_PREFIX2}的指示,\n{B_ATK_NAME_WITH_PREFIX}使出了招式!"),
|
||||
[STRINGID_USEDINSTRUCTEDMOVE] = COMPOUND_STRING("根据{B_ATK_NAME_WITH_PREFIX2}的指示,\n{B_DEF_NAME_WITH_PREFIX}使出了招式!"),
|
||||
[STRINGID_THROATCHOPENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}\n变得可以使出声音的招式了!"),
|
||||
[STRINGID_PKMNCANTUSEMOVETHROATCHOP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX2}\n因深渊突刺的效果无法使出招式!\p"),
|
||||
[STRINGID_LASERFOCUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}\n磨砺了精神!"),
|
||||
|
||||
@ -6093,7 +6093,7 @@ static void Cmd_moveend(void)
|
||||
break;
|
||||
case PROTECT_BANEFUL_BUNKER:
|
||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
||||
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker)))
|
||||
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerTarget), GetBattlerAbility(gBattlerAttacker)))
|
||||
{
|
||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
||||
|
||||
@ -4809,7 +4809,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
|
||||
}
|
||||
break;
|
||||
case ABILITY_BALL_FETCH:
|
||||
if (gBattleMons[battler].item == ITEM_NONE
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_RAID)
|
||||
&& gBattleMons[battler].item == ITEM_NONE
|
||||
&& gBattleResults.catchAttempts[ItemIdToBallId(gLastUsedBall)] >= 1
|
||||
&& !gHasFetchedBall)
|
||||
{
|
||||
@ -5875,6 +5876,7 @@ bool32 IsBattlerTerrainAffected(u32 battler, enum Ability ability, enum HoldEffe
|
||||
u32 GetHighestStatId(u32 battler)
|
||||
{
|
||||
u32 highestId = STAT_ATK;
|
||||
bool32 wonderRoom = (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) != 0;
|
||||
u32 highestStat = gBattleMons[battler].attack;
|
||||
|
||||
for (u32 stat = STAT_DEF; stat < NUM_STATS; stat++)
|
||||
@ -5882,10 +5884,28 @@ u32 GetHighestStatId(u32 battler)
|
||||
if (stat == STAT_SPEED)
|
||||
continue;
|
||||
|
||||
u16 *statVal = &gBattleMons[battler].attack + (stat - 1);
|
||||
if (*statVal > highestStat)
|
||||
u32 statVal;
|
||||
switch (stat)
|
||||
{
|
||||
highestStat = *statVal;
|
||||
case STAT_ATK:
|
||||
statVal = gBattleMons[battler].attack;
|
||||
break;
|
||||
case STAT_DEF:
|
||||
statVal = wonderRoom ? gBattleMons[battler].spDefense : gBattleMons[battler].defense;
|
||||
break;
|
||||
case STAT_SPATK:
|
||||
statVal = gBattleMons[battler].spAttack;
|
||||
break;
|
||||
case STAT_SPDEF:
|
||||
statVal = wonderRoom ? gBattleMons[battler].defense : gBattleMons[battler].spDefense;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
if (statVal > highestStat)
|
||||
{
|
||||
highestStat = statVal;
|
||||
highestId = stat;
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,23 +17,26 @@ SINGLE_BATTLE_TEST("Beast Boost boosts the most proficient stat when knocking ou
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
switch(i) {
|
||||
case 0:
|
||||
MESSAGE("Nihilego's Attack rose!");
|
||||
break;
|
||||
case 1:
|
||||
MESSAGE("Nihilego's Defense rose!");
|
||||
break;
|
||||
case 2:
|
||||
MESSAGE("Nihilego's Sp. Atk rose!");
|
||||
break;
|
||||
case 3:
|
||||
MESSAGE("Nihilego's Sp. Def rose!");
|
||||
break;
|
||||
case 4:
|
||||
MESSAGE("Nihilego's Speed rose!");
|
||||
break;
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
u32 expectedStat = STAT_ATK;
|
||||
|
||||
switch (i) {
|
||||
case 1:
|
||||
expectedStat = STAT_DEF;
|
||||
break;
|
||||
case 2:
|
||||
expectedStat = STAT_SPATK;
|
||||
break;
|
||||
case 3:
|
||||
expectedStat = STAT_SPDEF;
|
||||
break;
|
||||
case 4:
|
||||
expectedStat = STAT_SPEED;
|
||||
break;
|
||||
}
|
||||
|
||||
EXPECT_EQ(player->statStages[expectedStat], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,28 +76,180 @@ SINGLE_BATTLE_TEST("Beast Boost prioritizes stats in the case of a tie in the fo
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
switch(i) {
|
||||
case 0:
|
||||
MESSAGE("Nihilego's Attack rose!");
|
||||
break;
|
||||
case 1:
|
||||
MESSAGE("Nihilego's Defense rose!");
|
||||
break;
|
||||
case 2:
|
||||
MESSAGE("Nihilego's Sp. Atk rose!");
|
||||
break;
|
||||
case 3:
|
||||
MESSAGE("Nihilego's Sp. Def rose!");
|
||||
break;
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
u32 expectedStat = STAT_ATK;
|
||||
|
||||
switch (i) {
|
||||
case 1:
|
||||
expectedStat = STAT_DEF;
|
||||
break;
|
||||
case 2:
|
||||
expectedStat = STAT_SPATK;
|
||||
break;
|
||||
case 3:
|
||||
expectedStat = STAT_SPDEF;
|
||||
break;
|
||||
}
|
||||
|
||||
EXPECT_EQ(player->statStages[expectedStat], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Beast Boost considers Power Split");
|
||||
TO_DO_BATTLE_TEST("Beast Boost considers Guard Split");
|
||||
TO_DO_BATTLE_TEST("Beast Boost considers Power Trick");
|
||||
TO_DO_BATTLE_TEST("Beast Boost considers Wonder Room");
|
||||
TO_DO_BATTLE_TEST("Beast Boost considers Speed Swap");
|
||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider stat stages");
|
||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider held items");
|
||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider status condition reductions");
|
||||
SINGLE_BATTLE_TEST("Beast Boost considers Power Split")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_POWER_SPLIT) == EFFECT_POWER_SPLIT);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(200); Defense(30); SpAttack(50); SpDefense(30); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Attack(10); SpAttack(250); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_POWER_SPLIT); }
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWER_SPLIT, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost considers Guard Split")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_GUARD_SPLIT) == EFFECT_GUARD_SPLIT);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(80); Defense(20); SpAttack(70); SpDefense(10); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Defense(200); SpDefense(30); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_GUARD_SPLIT); }
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_GUARD_SPLIT, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost considers Power Trick")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_POWER_TRICK) == EFFECT_POWER_TRICK);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(40); Defense(200); SpAttack(60); SpDefense(50); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_POWER_TRICK); }
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWER_TRICK, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost considers Wonder Room")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_WONDER_ROOM) == EFFECT_WONDER_ROOM);
|
||||
ASSUME(GetMovePower(MOVE_SCRATCH) > 0);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(100); Defense(50); SpAttack(70); SpDefense(200); Speed(120); Moves(MOVE_SPLASH, MOVE_EXTREME_SPEED); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(200); Moves(MOVE_WONDER_ROOM, MOVE_SPLASH); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(30); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_WONDER_ROOM); MOVE(player, MOVE_SPLASH); }
|
||||
TURN { MOVE(player, MOVE_EXTREME_SPEED); MOVE(opponent, MOVE_SPLASH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_WONDER_ROOM, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_SPEED, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost considers Speed Swap")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_SPEED_SWAP) == EFFECT_SPEED_SWAP);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(60); Defense(60); SpAttack(70); SpDefense(60); Speed(30); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(200); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SPEED_SWAP); }
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPEED_SWAP, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost doesn't consider stat stages")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_SWORDS_DANCE) == EFFECT_ATTACK_UP_2);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(100); Defense(60); SpAttack(150); SpDefense(60); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SWORDS_DANCE); }
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost doesn't consider held items")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND);
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Item(ITEM_CHOICE_BAND); Attack(120); Defense(60); SpAttack(150); SpDefense(60); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Beast Boost doesn't consider status condition reductions")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Status1(STATUS1_BURN); Attack(150); Defense(60); SpAttack(100); SpDefense(60); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player);
|
||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,9 +239,115 @@ SINGLE_BATTLE_TEST("Corrosion's effect is lost if the move used by the Pokémon
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Baneful Bunker")
|
||||
TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Psycho Shift while poisoned")
|
||||
TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Toxic Orb")
|
||||
TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Poison Barb")
|
||||
SINGLE_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Baneful Bunker")
|
||||
{
|
||||
u16 species;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ODDISH; }
|
||||
PARAMETRIZE { species = SPECIES_BELDUM; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_BANEFUL_BUNKER) == EFFECT_PROTECT);
|
||||
ASSUME(MoveMakesContact(MOVE_SCRATCH));
|
||||
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); }
|
||||
OPPONENT(species);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_BANEFUL_BUNKER); MOVE(opponent, MOVE_SCRATCH); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_BANEFUL_BUNKER, player);
|
||||
MESSAGE("Salandit protected itself!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent);
|
||||
MESSAGE("Salandit protected itself!");
|
||||
STATUS_ICON(opponent, poison: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Psycho Shift while poisoned")
|
||||
{
|
||||
u16 species;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ODDISH; }
|
||||
PARAMETRIZE { species = SPECIES_BELDUM; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_PSYCHO_SHIFT) == EFFECT_PSYCHO_SHIFT);
|
||||
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Status1(STATUS1_POISON); }
|
||||
OPPONENT(species);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_PSYCHO_SHIFT); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_SHIFT, player);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
||||
STATUS_ICON(opponent, poison: TRUE);
|
||||
STATUS_ICON(player, none: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Toxic Orb")
|
||||
{
|
||||
u16 species;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ODDISH; }
|
||||
PARAMETRIZE { species = SPECIES_BELDUM; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING);
|
||||
ASSUME(gItemsInfo[ITEM_TOXIC_ORB].holdEffect == HOLD_EFFECT_TOXIC_ORB);
|
||||
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Item(ITEM_TOXIC_ORB); }
|
||||
OPPONENT(species);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_FLING); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player);
|
||||
HP_BAR(opponent);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
||||
STATUS_ICON(opponent, badPoison: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Poison Barb")
|
||||
{
|
||||
u16 species;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ODDISH; }
|
||||
PARAMETRIZE { species = SPECIES_BELDUM; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING);
|
||||
ASSUME(gItemsInfo[ITEM_POISON_BARB].holdEffect == HOLD_EFFECT_TYPE_POWER);
|
||||
ASSUME(gItemsInfo[ITEM_POISON_BARB].secondaryId == TYPE_POISON);
|
||||
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Item(ITEM_POISON_BARB); }
|
||||
OPPONENT(species);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_FLING); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player);
|
||||
HP_BAR(opponent);
|
||||
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
|
||||
STATUS_ICON(opponent, poison: TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Corrosion does not affect Poison Spikes")
|
||||
{
|
||||
u16 species;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ODDISH; }
|
||||
PARAMETRIZE { species = SPECIES_BELDUM; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(GetMoveEffect(MOVE_TOXIC_SPIKES) == EFFECT_TOXIC_SPIKES);
|
||||
PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(species);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_TOXIC_SPIKES); }
|
||||
TURN { SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player);
|
||||
} THEN {
|
||||
EXPECT_EQ(opponent->status1, STATUS1_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
TO_DO_BATTLE_TEST("Dynamax: Corrosion can poison Poison/Steel types if the Pokémon uses G-Max Malodor")
|
||||
TO_DO_BATTLE_TEST("Corrosion does not affect Poison Spikes")
|
||||
|
||||
@ -322,3 +322,28 @@ DOUBLE_BATTLE_TEST("Instructed move will be redirected by Rage Powder after inst
|
||||
HP_BAR(opponentLeft);
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Instruct message references the correct battlers")
|
||||
{
|
||||
GIVEN {
|
||||
PLAYER(SPECIES_TREECKO);
|
||||
PLAYER(SPECIES_SCEPTILE);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
OPPONENT(SPECIES_WYNAUT);
|
||||
} WHEN {
|
||||
TURN {
|
||||
MOVE(playerLeft, MOVE_CELEBRATE);
|
||||
MOVE(playerRight, MOVE_SCRATCH, target: opponentLeft);
|
||||
MOVE(opponentLeft, MOVE_DRAGON_DARTS, target:playerLeft);
|
||||
MOVE(opponentRight, MOVE_INSTRUCT, target: playerRight);
|
||||
}
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerRight);
|
||||
MESSAGE("The opposing Wynaut used Instruct!");
|
||||
NONE_OF {
|
||||
MESSAGE("Sceptile followed the opposing Wobbuffet's instructions!");
|
||||
}
|
||||
MESSAGE("Sceptile followed the opposing Wynaut's instructions!");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, playerRight);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user