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
|
tryinstruct BattleScript_ButItFailed
|
||||||
attackanimation
|
attackanimation
|
||||||
waitanimation
|
waitanimation
|
||||||
copybyte gBattlerAttacker, gBattlerTarget
|
|
||||||
copybyte gBattlerTarget, gEffectBattler
|
|
||||||
printstring STRINGID_USEDINSTRUCTEDMOVE
|
printstring STRINGID_USEDINSTRUCTEDMOVE
|
||||||
waitmessage B_WAIT_TIME_LONG
|
waitmessage B_WAIT_TIME_LONG
|
||||||
|
copybyte gBattlerAttacker, gBattlerTarget
|
||||||
|
copybyte gBattlerTarget, gEffectBattler
|
||||||
jumptocalledmove TRUE
|
jumptocalledmove TRUE
|
||||||
|
|
||||||
BattleScript_EffectAutotomize::
|
BattleScript_EffectAutotomize::
|
||||||
|
|||||||
@ -666,7 +666,7 @@ const u8 *const gBattleStringsTable[STRINGID_COUNT] =
|
|||||||
[STRINGID_SWEETVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}\n因甜幕而不会睡着!"),
|
[STRINGID_SWEETVEILPROTECTED] = COMPOUND_STRING("{B_DEF_NAME_WITH_PREFIX}\n因甜幕而不会睡着!"),
|
||||||
[STRINGID_AROMAVEILPROTECTED] = 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_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_THROATCHOPENDS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}\n变得可以使出声音的招式了!"),
|
||||||
[STRINGID_PKMNCANTUSEMOVETHROATCHOP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX2}\n因深渊突刺的效果无法使出招式!\p"),
|
[STRINGID_PKMNCANTUSEMOVETHROATCHOP] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX2}\n因深渊突刺的效果无法使出招式!\p"),
|
||||||
[STRINGID_LASERFOCUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}\n磨砺了精神!"),
|
[STRINGID_LASERFOCUS] = COMPOUND_STRING("{B_ATK_NAME_WITH_PREFIX}\n磨砺了精神!"),
|
||||||
|
|||||||
@ -6093,7 +6093,7 @@ static void Cmd_moveend(void)
|
|||||||
break;
|
break;
|
||||||
case PROTECT_BANEFUL_BUNKER:
|
case PROTECT_BANEFUL_BUNKER:
|
||||||
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
if (!IsProtectivePadsProtected(gBattlerAttacker, GetBattlerHoldEffect(gBattlerAttacker))
|
||||||
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, gLastUsedAbility, GetBattlerAbility(gBattlerAttacker)))
|
&& CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerTarget), GetBattlerAbility(gBattlerAttacker)))
|
||||||
{
|
{
|
||||||
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
gProtectStructs[gBattlerAttacker].touchedProtectLike = FALSE;
|
||||||
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
gBattleScripting.moveEffect = MOVE_EFFECT_POISON;
|
||||||
|
|||||||
@ -4809,7 +4809,8 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ABILITY_BALL_FETCH:
|
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
|
&& gBattleResults.catchAttempts[ItemIdToBallId(gLastUsedBall)] >= 1
|
||||||
&& !gHasFetchedBall)
|
&& !gHasFetchedBall)
|
||||||
{
|
{
|
||||||
@ -5875,6 +5876,7 @@ bool32 IsBattlerTerrainAffected(u32 battler, enum Ability ability, enum HoldEffe
|
|||||||
u32 GetHighestStatId(u32 battler)
|
u32 GetHighestStatId(u32 battler)
|
||||||
{
|
{
|
||||||
u32 highestId = STAT_ATK;
|
u32 highestId = STAT_ATK;
|
||||||
|
bool32 wonderRoom = (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) != 0;
|
||||||
u32 highestStat = gBattleMons[battler].attack;
|
u32 highestStat = gBattleMons[battler].attack;
|
||||||
|
|
||||||
for (u32 stat = STAT_DEF; stat < NUM_STATS; stat++)
|
for (u32 stat = STAT_DEF; stat < NUM_STATS; stat++)
|
||||||
@ -5882,10 +5884,28 @@ u32 GetHighestStatId(u32 battler)
|
|||||||
if (stat == STAT_SPEED)
|
if (stat == STAT_SPEED)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
u16 *statVal = &gBattleMons[battler].attack + (stat - 1);
|
u32 statVal;
|
||||||
if (*statVal > highestStat)
|
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;
|
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); }
|
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||||
} SCENE {
|
} SCENE {
|
||||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||||
switch(i) {
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||||
case 0:
|
} THEN {
|
||||||
MESSAGE("Nihilego's Attack rose!");
|
u32 expectedStat = STAT_ATK;
|
||||||
break;
|
|
||||||
case 1:
|
switch (i) {
|
||||||
MESSAGE("Nihilego's Defense rose!");
|
case 1:
|
||||||
break;
|
expectedStat = STAT_DEF;
|
||||||
case 2:
|
break;
|
||||||
MESSAGE("Nihilego's Sp. Atk rose!");
|
case 2:
|
||||||
break;
|
expectedStat = STAT_SPATK;
|
||||||
case 3:
|
break;
|
||||||
MESSAGE("Nihilego's Sp. Def rose!");
|
case 3:
|
||||||
break;
|
expectedStat = STAT_SPDEF;
|
||||||
case 4:
|
break;
|
||||||
MESSAGE("Nihilego's Speed rose!");
|
case 4:
|
||||||
break;
|
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); }
|
TURN { MOVE(player, MOVE_SCRATCH); SEND_OUT(opponent, 1); }
|
||||||
} SCENE {
|
} SCENE {
|
||||||
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
ABILITY_POPUP(player, ABILITY_BEAST_BOOST);
|
||||||
switch(i) {
|
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
|
||||||
case 0:
|
} THEN {
|
||||||
MESSAGE("Nihilego's Attack rose!");
|
u32 expectedStat = STAT_ATK;
|
||||||
break;
|
|
||||||
case 1:
|
switch (i) {
|
||||||
MESSAGE("Nihilego's Defense rose!");
|
case 1:
|
||||||
break;
|
expectedStat = STAT_DEF;
|
||||||
case 2:
|
break;
|
||||||
MESSAGE("Nihilego's Sp. Atk rose!");
|
case 2:
|
||||||
break;
|
expectedStat = STAT_SPATK;
|
||||||
case 3:
|
break;
|
||||||
MESSAGE("Nihilego's Sp. Def rose!");
|
case 3:
|
||||||
break;
|
expectedStat = STAT_SPDEF;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPECT_EQ(player->statStages[expectedStat], DEFAULT_STAT_STAGE + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TO_DO_BATTLE_TEST("Beast Boost considers Power Split");
|
SINGLE_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");
|
GIVEN {
|
||||||
TO_DO_BATTLE_TEST("Beast Boost considers Wonder Room");
|
ASSUME(GetMoveEffect(MOVE_POWER_SPLIT) == EFFECT_POWER_SPLIT);
|
||||||
TO_DO_BATTLE_TEST("Beast Boost considers Speed Swap");
|
PLAYER(SPECIES_NIHILEGO) { Ability(ABILITY_BEAST_BOOST); Attack(200); Defense(30); SpAttack(50); SpDefense(30); }
|
||||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider stat stages");
|
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Attack(10); SpAttack(250); }
|
||||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider held items");
|
OPPONENT(SPECIES_WOBBUFFET);
|
||||||
TO_DO_BATTLE_TEST("Beast Boost doesn't consider status condition reductions");
|
} 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")
|
SINGLE_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")
|
u16 species;
|
||||||
TO_DO_BATTLE_TEST("Corrosion can poison Poison/Steel types if the Pokémon uses Fling while holding a Poison Barb")
|
|
||||||
|
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("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);
|
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