Fix most failed and assume fail tests with GEN_LATEST = GEN_6 (#7696)
This commit is contained in:
parent
70dec039cb
commit
deaf77f619
@ -8031,11 +8031,12 @@ BattleScript_WeakArmorDefPrintString:
|
||||
printstring STRINGID_TARGETABILITYSTATLOWER
|
||||
waitmessage B_WAIT_TIME_LONG
|
||||
BattleScript_WeakArmorActivatesSpeed:
|
||||
.if B_WEAK_ARMOR_SPEED >= GEN_7
|
||||
jumpifgenconfiglowerthan GEN_CONFIG_WEAK_ARMOR_SPEED, GEN_7, BattleScript_WeakArmorSetSpeedGen6
|
||||
setstatchanger STAT_SPEED, 2, FALSE
|
||||
.else
|
||||
goto BattleScript_WeakArmorDoSpeed
|
||||
BattleScript_WeakArmorSetSpeedGen6:
|
||||
setstatchanger STAT_SPEED, 1, FALSE
|
||||
.endif
|
||||
BattleScript_WeakArmorDoSpeed:
|
||||
statbuffchange BS_TARGET, STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd
|
||||
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedPrintString
|
||||
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd
|
||||
|
||||
@ -35,6 +35,12 @@ enum GenConfigTag
|
||||
GEN_CONFIG_DISGUISE_HP_LOSS,
|
||||
GEN_CONFIG_AFTER_YOU_TURN_ORDER,
|
||||
GEN_CONFIG_HEALING_WISH_SWITCH,
|
||||
GEN_CONFIG_MEGA_EVO_TURN_ORDER,
|
||||
GEN_CONFIG_SHEER_COLD_IMMUNITY,
|
||||
GEN_CONFIG_WEAK_ARMOR_SPEED,
|
||||
GEN_CONFIG_PRANKSTER_DARK_TYPES,
|
||||
GEN_CONFIG_DESTINY_BOND_FAIL,
|
||||
GEN_CONFIG_POWDER_RAIN,
|
||||
GEN_CONFIG_COUNT
|
||||
};
|
||||
|
||||
|
||||
@ -38,6 +38,12 @@ static const u8 sGenerationalChanges[GEN_CONFIG_COUNT] =
|
||||
[GEN_CONFIG_DISGUISE_HP_LOSS] = B_DISGUISE_HP_LOSS,
|
||||
[GEN_CONFIG_AFTER_YOU_TURN_ORDER] = B_AFTER_YOU_TURN_ORDER,
|
||||
[GEN_CONFIG_HEALING_WISH_SWITCH] = B_HEALING_WISH_SWITCH,
|
||||
[GEN_CONFIG_MEGA_EVO_TURN_ORDER] = B_MEGA_EVO_TURN_ORDER,
|
||||
[GEN_CONFIG_SHEER_COLD_IMMUNITY] = B_SHEER_COLD_IMMUNITY,
|
||||
[GEN_CONFIG_WEAK_ARMOR_SPEED] = B_WEAK_ARMOR_SPEED,
|
||||
[GEN_CONFIG_PRANKSTER_DARK_TYPES] = B_PRANKSTER_DARK_TYPES,
|
||||
[GEN_CONFIG_DESTINY_BOND_FAIL] = B_DESTINY_BOND_FAIL,
|
||||
[GEN_CONFIG_POWDER_RAIN] = B_POWDER_RAIN,
|
||||
};
|
||||
|
||||
#if TESTING
|
||||
|
||||
@ -1258,7 +1258,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
} // def partner ability checks
|
||||
|
||||
// gen7+ dark type mons immune to priority->elevated moves from prankster
|
||||
if (B_PRANKSTER_DARK_TYPES >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)
|
||||
if (GetGenConfig(GEN_CONFIG_PRANKSTER_DARK_TYPES) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_DARK)
|
||||
&& aiData->abilities[battlerAtk] == ABILITY_PRANKSTER && IsBattleMoveStatus(move)
|
||||
&& !(moveTarget & (MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
|
||||
RETURN_SCORE_MINUS(10);
|
||||
@ -1722,7 +1722,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
ADJUST_SCORE(-10);
|
||||
break;
|
||||
case EFFECT_SHEER_COLD:
|
||||
if (B_SHEER_COLD_IMMUNITY >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE))
|
||||
if (GetGenConfig(GEN_CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE))
|
||||
RETURN_SCORE_MINUS(20);
|
||||
// fallthrough
|
||||
case EFFECT_OHKO:
|
||||
@ -3094,7 +3094,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
switch (effect)
|
||||
{
|
||||
case EFFECT_HELPING_HAND:
|
||||
if (!hasPartner
|
||||
if (!hasPartner
|
||||
|| !HasDamagingMove(battlerAtkPartner)
|
||||
|| (aiData->partnerMove != MOVE_NONE && IsBattleMoveStatus(aiData->partnerMove)))
|
||||
{
|
||||
@ -3110,7 +3110,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
if (hasTwoOpponents)
|
||||
{
|
||||
// Might be about to die
|
||||
if (CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtk), battlerAtk) && CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtkPartner), battlerAtk)
|
||||
if (CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtk), battlerAtk) && CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtkPartner), battlerAtk)
|
||||
&& AI_IsSlower(battlerAtk, BATTLE_OPPOSITE(battlerAtk), move, predictedMove, DONT_CONSIDER_PRIORITY)
|
||||
&& AI_IsSlower(battlerAtk, BATTLE_OPPOSITE(battlerAtkPartner), move, predictedMove, DONT_CONSIDER_PRIORITY))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
@ -3132,14 +3132,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|
||||
else if (IsBattlerAlive(BATTLE_OPPOSITE(battlerAtkPartner)))
|
||||
{
|
||||
// Might be about to die
|
||||
if (CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtkPartner), battlerAtk)
|
||||
if (CanTargetFaintAi(BATTLE_OPPOSITE(battlerAtkPartner), battlerAtk)
|
||||
&& AI_IsSlower(battlerAtk, BATTLE_OPPOSITE(battlerAtkPartner), move, predictedMove, DONT_CONSIDER_PRIORITY))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
|
||||
if (ownHitsToKOFoe2 > partnerHitsToKOFoe2 && partnerHitsToKOFoe2 > 1)
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EFFECT_PERISH_SONG:
|
||||
@ -5184,7 +5184,7 @@ case EFFECT_GUARD_SPLIT:
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
// Set it for next pokemon in singles.
|
||||
else if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && !hasPartner && (CountUsablePartyMons(battlerAtk) != 0))
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
ADJUST_SCORE(DECENT_EFFECT);
|
||||
// Don't unset it on last turn.
|
||||
else if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && gFieldTimers.trickRoomTimer != (gBattleTurnCounter + 1) && ShouldClearFieldStatus(battlerAtk, STATUS_FIELD_TRICK_ROOM))
|
||||
ADJUST_SCORE(GOOD_EFFECT);
|
||||
@ -5315,7 +5315,7 @@ case EFFECT_GUARD_SPLIT:
|
||||
u32 partnerSpeed = aiData->speedStats[BATTLE_PARTNER(battlerAtk)];
|
||||
u32 foe1Speed = aiData->speedStats[FOE(battlerAtk)];
|
||||
u32 foe2Speed = aiData->speedStats[BATTLE_PARTNER(FOE(battlerAtk))];
|
||||
|
||||
|
||||
if (speed <= foe1Speed && (speed * 2) > foe1Speed)
|
||||
tailwindScore += 1;
|
||||
if (speed <= foe2Speed && (speed * 2) > foe2Speed)
|
||||
|
||||
@ -5184,7 +5184,7 @@ static bool32 TryDoGimmicksBeforeMoves(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (B_MEGA_EVO_TURN_ORDER >= GEN_7)
|
||||
if (GetGenConfig(GEN_CONFIG_MEGA_EVO_TURN_ORDER) >= GEN_7)
|
||||
TryChangeTurnOrder(); // This will just do nothing if no mon has mega evolved.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -2342,7 +2342,7 @@ static enum MoveCanceller CancellerWeatherPrimal(void)
|
||||
if (HasWeatherEffect() && GetMovePower(gCurrentMove) > 0)
|
||||
{
|
||||
u32 moveType = GetBattleMoveType(gCurrentMove);
|
||||
if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (B_POWDER_RAIN >= GEN_7 || !TryActivatePowderStatus(gCurrentMove)))
|
||||
if (moveType == TYPE_FIRE && (gBattleWeather & B_WEATHER_RAIN_PRIMAL) && (GetGenConfig(GEN_CONFIG_POWDER_RAIN) >= GEN_7 || !TryActivatePowderStatus(gCurrentMove)))
|
||||
{
|
||||
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PRIMAL_WEATHER_FIZZLED_BY_RAIN;
|
||||
effect = MOVE_STEP_BREAK;
|
||||
@ -9724,7 +9724,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(struct DamageCont
|
||||
RecordAbilityBattle(ctx->battlerDef, ABILITY_LEVITATE);
|
||||
}
|
||||
}
|
||||
else if (B_SHEER_COLD_IMMUNITY >= GEN_7 && GetMoveEffect(ctx->move) == EFFECT_SHEER_COLD && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_ICE))
|
||||
else if (GetGenConfig(GEN_CONFIG_SHEER_COLD_IMMUNITY) >= GEN_7 && GetMoveEffect(ctx->move) == EFFECT_SHEER_COLD && IS_BATTLER_OF_TYPE(ctx->battlerDef, TYPE_ICE))
|
||||
{
|
||||
modifier = UQ_4_12(0.0);
|
||||
}
|
||||
@ -10812,7 +10812,7 @@ bool32 TryRoomService(u32 battler)
|
||||
|
||||
bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget)
|
||||
{
|
||||
if (B_PRANKSTER_DARK_TYPES < GEN_7)
|
||||
if (GetGenConfig(GEN_CONFIG_PRANKSTER_DARK_TYPES) < GEN_7)
|
||||
return FALSE;
|
||||
if (!gProtectStructs[battlerPrankster].pranksterElevated)
|
||||
return FALSE;
|
||||
@ -11338,7 +11338,7 @@ void ClearDamageCalcResults(void)
|
||||
|
||||
bool32 DoesDestinyBondFail(u32 battler)
|
||||
{
|
||||
if (B_DESTINY_BOND_FAIL >= GEN_7
|
||||
if (GetGenConfig(GEN_CONFIG_DESTINY_BOND_FAIL) >= GEN_7
|
||||
&& GetMoveEffect(gLastLandedMoves[battler]) == EFFECT_DESTINY_BOND
|
||||
&& GetMoveEffect(gLastResultingMoves[battler]) == EFFECT_DESTINY_BOND)
|
||||
return TRUE;
|
||||
|
||||
@ -9,9 +9,9 @@ SINGLE_BATTLE_TEST("Flash Fire boosts fire type moves by 50% but no subsequent i
|
||||
PLAYER(SPECIES_HEATRAN) { Ability(ABILITY_FLASH_FIRE); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_EMBER); MOVE(opponent, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_EMBER); MOVE(opponent, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_EMBER, secondaryEffect: FALSE); MOVE(opponent, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_EMBER, secondaryEffect: FALSE); MOVE(opponent, MOVE_EMBER); }
|
||||
TURN { MOVE(player, MOVE_EMBER, secondaryEffect: FALSE); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
|
||||
HP_BAR(opponent, captureDamage: &damage[0]);
|
||||
|
||||
@ -7,22 +7,31 @@ ASSUMPTIONS
|
||||
ASSUME(GetMoveCategory(MOVE_CONFUSE_RAY) == DAMAGE_CATEGORY_STATUS);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon")
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon (Gen7+)")
|
||||
{
|
||||
u32 gen;
|
||||
PARAMETRIZE { gen = GEN_6; }
|
||||
PARAMETRIZE { gen = GEN_7; }
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, gen);
|
||||
PLAYER(SPECIES_UMBREON);
|
||||
OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_CONFUSE_RAY); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
MESSAGE("It doesn't affect Umbreon…");
|
||||
if (gen == GEN_6) {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
} else {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
MESSAGE("It doesn't affect Umbreon…");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves don't affect Dark-type Pokémon after they switch-in")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, GEN_7);
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_UMBREON);
|
||||
OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
|
||||
@ -49,39 +58,62 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves affect Ally Dark-type Pokémon")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark-type Pokémon")
|
||||
SINGLE_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark-type Pokémon (Gen 7+)")
|
||||
{
|
||||
u32 gen;
|
||||
PARAMETRIZE { gen = GEN_6; }
|
||||
PARAMETRIZE { gen = GEN_7; }
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, gen);
|
||||
PLAYER(SPECIES_UMBREON);
|
||||
OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); };
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_ASSIST); }
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
MESSAGE("It doesn't affect Umbreon…");
|
||||
if (gen == GEN_6) {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
} else {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent);
|
||||
MESSAGE("It doesn't affect Umbreon…");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Tested on Showdown, even though Bulbapedia says otherwise.
|
||||
DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect Dark-type Pokémon")
|
||||
{
|
||||
u32 gen;
|
||||
PARAMETRIZE { gen = GEN_6; }
|
||||
PARAMETRIZE { gen = GEN_7; }
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, gen);
|
||||
PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); }
|
||||
PLAYER(SPECIES_WOBBUFFET) { Speed(10);}
|
||||
OPPONENT(SPECIES_UMBREON) { Speed(1); }
|
||||
OPPONENT(SPECIES_UMBREON) { Speed(15); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
|
||||
OPPONENT(SPECIES_UMBREON) { Speed(1); }
|
||||
} WHEN {
|
||||
TURN { MOVE(playerLeft, MOVE_CONFUSE_RAY, target: opponentLeft);
|
||||
MOVE(opponentLeft, MOVE_U_TURN, target: playerRight, WITH_RNG(RNG_CONFUSION, FALSE));
|
||||
SEND_OUT(opponentLeft, 2);
|
||||
MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft);
|
||||
}
|
||||
} SCENE {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
MESSAGE("It doesn't affect the opposing Umbreon…");
|
||||
if (gen == GEN_6) {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
} else {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
MESSAGE("It doesn't affect the opposing Umbreon…");
|
||||
}
|
||||
MESSAGE("Wobbuffet used Instruct!");
|
||||
MESSAGE("Volbeat used Confuse Ray!");
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
MESSAGE("It doesn't affect the opposing Umbreon…");
|
||||
if (gen == GEN_6) {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
} else {
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, playerLeft);
|
||||
MESSAGE("It doesn't affect the opposing Umbreon…");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -171,6 +203,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves which are reflected by Magic Coat c
|
||||
PARAMETRIZE { sableyeAbility = ABILITY_KEEN_EYE; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, GEN_7);
|
||||
PLAYER(SPECIES_SABLEYE) { Ability(sableyeAbility); }
|
||||
OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); }
|
||||
} WHEN {
|
||||
|
||||
@ -7,17 +7,18 @@ ASSUMPTIONS
|
||||
ASSUME(!IsBattleMoveStatus(MOVE_GUST));
|
||||
ASSUME(GetMoveCategory(MOVE_GUST) == DAMAGE_CATEGORY_SPECIAL);
|
||||
ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL);
|
||||
ASSUME(B_WEAK_ARMOR_SPEED >= GEN_7);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hit by a physical attack")
|
||||
SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 1 (Gen5-6) or 2 (Gen7+) when hit by a physical attack")
|
||||
{
|
||||
u16 move;
|
||||
u16 move, gen;
|
||||
|
||||
PARAMETRIZE { move = MOVE_SCRATCH; }
|
||||
PARAMETRIZE { move = MOVE_GUST; }
|
||||
PARAMETRIZE { move = MOVE_SCRATCH; gen = GEN_6; }
|
||||
PARAMETRIZE { move = MOVE_SCRATCH; gen = GEN_7; }
|
||||
PARAMETRIZE { move = MOVE_GUST; gen = GEN_7; }
|
||||
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_WEAK_ARMOR_SPEED, gen);
|
||||
PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -41,7 +42,10 @@ SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hi
|
||||
} THEN {
|
||||
if (move == MOVE_SCRATCH) {
|
||||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1);
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2);
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + (gen == GEN_7 ? 2 : 1));
|
||||
} else {
|
||||
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -79,7 +83,12 @@ SINGLE_BATTLE_TEST("Weak Armor does not trigger when brought in by Dragon Tail a
|
||||
|
||||
SINGLE_BATTLE_TEST("Weak Armor still boosts Speed if Defense can't go any lower")
|
||||
{
|
||||
u16 gen;
|
||||
|
||||
PARAMETRIZE { gen = GEN_6; }
|
||||
PARAMETRIZE { gen = GEN_7; }
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_WEAK_ARMOR_SPEED, gen);
|
||||
PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
} WHEN {
|
||||
@ -100,7 +109,7 @@ SINGLE_BATTLE_TEST("Weak Armor still boosts Speed if Defense can't go any lower"
|
||||
MESSAGE("Slugma's Weak Armor raised its Speed!");
|
||||
} THEN {
|
||||
EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE);
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2);
|
||||
EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + (gen == GEN_7 ? 2 : 1));
|
||||
}
|
||||
}
|
||||
|
||||
@ -135,6 +144,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can'
|
||||
{
|
||||
u32 j;
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_WEAK_ARMOR_SPEED, GEN_7);
|
||||
PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); }
|
||||
OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); }
|
||||
} WHEN {
|
||||
@ -173,6 +183,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't
|
||||
{
|
||||
u32 j;
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_WEAK_ARMOR_SPEED, GEN_7);
|
||||
PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); }
|
||||
OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); }
|
||||
} WHEN {
|
||||
|
||||
@ -64,13 +64,14 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive o
|
||||
PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
|
||||
|
||||
GIVEN {
|
||||
ASSUME(P_UPDATED_STATS >= GEN_7); // Swellow's 50 Sp.Atk in Gen 6 instead of the current 75 causes the AI to switch to Electrode
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT | aiRiskyFlag);
|
||||
PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
|
||||
OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
|
||||
OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron
|
||||
OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); Ability(ABILITY_STATIC); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); }
|
||||
TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1033,7 +1033,7 @@ AI_SINGLE_BATTLE_TEST("Switch AI: AI will switch into mon with good type matchup
|
||||
AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI correctly handles abilities when scoring moves")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_PRANKSTER_DARK_TYPES >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_PRANKSTER_DARK_TYPES, GEN_7);
|
||||
ASSUME(GetSpeciesType(SPECIES_GRENINJA, 1) == TYPE_DARK);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_MON_CHOICES);
|
||||
PLAYER(SPECIES_GRENINJA) { Moves(MOVE_WATER_GUN); }
|
||||
|
||||
@ -62,7 +62,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 1-100")
|
||||
{
|
||||
u32 moveStart = 0;
|
||||
u32 moveCap = 100;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -92,7 +92,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 1-100")
|
||||
case EFFECT_DISABLE:
|
||||
|
||||
// tests exist elsewhere
|
||||
|
||||
|
||||
// Skipped on purpose.
|
||||
case EFFECT_PROTECT:
|
||||
case EFFECT_NON_VOLATILE_STATUS:
|
||||
@ -124,7 +124,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 101-200")
|
||||
{
|
||||
u32 moveStart = 100;
|
||||
u32 moveCap = 200;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -200,7 +200,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 201-300")
|
||||
{
|
||||
u32 moveStart = 200;
|
||||
u32 moveCap = 300;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -285,7 +285,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400")
|
||||
{
|
||||
u32 moveStart = 300;
|
||||
u32 moveCap = 400;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -329,7 +329,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400")
|
||||
// tests exist elsewhere
|
||||
case EFFECT_HEAL_BELL:
|
||||
case EFFECT_ATTACK_UP_USER_ALLY:
|
||||
|
||||
|
||||
// Skipped on purpose.
|
||||
case EFFECT_PROTECT:
|
||||
case EFFECT_NON_VOLATILE_STATUS:
|
||||
@ -361,7 +361,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500")
|
||||
{
|
||||
u32 moveStart = 400;
|
||||
u32 moveCap = 500;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -390,12 +390,13 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500")
|
||||
//TODO: AI TESTS
|
||||
case EFFECT_RESTORE_HP:
|
||||
case EFFECT_CAPTIVATE:
|
||||
case EFFECT_DARK_VOID: // Gen 4-6's case is not being handled
|
||||
|
||||
// tests exist elsewhere
|
||||
case EFFECT_TRICK_ROOM:
|
||||
case EFFECT_GUARD_SPLIT:
|
||||
case EFFECT_POWER_SPLIT:
|
||||
|
||||
|
||||
// Skipped on purpose.
|
||||
case EFFECT_PROTECT:
|
||||
case EFFECT_NON_VOLATILE_STATUS:
|
||||
@ -427,7 +428,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600")
|
||||
{
|
||||
u32 moveStart = 515;
|
||||
u32 moveCap = 600;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -502,7 +503,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 601-700")
|
||||
{
|
||||
u32 moveStart = 600;
|
||||
u32 moveCap = 700;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -542,7 +543,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 601-700")
|
||||
case EFFECT_ELECTRIC_TERRAIN:
|
||||
case EFFECT_PSYCHIC_TERRAIN:
|
||||
case EFFECT_AURORA_VEIL:
|
||||
|
||||
|
||||
// Skipped on purpose.
|
||||
case EFFECT_PROTECT:
|
||||
case EFFECT_NON_VOLATILE_STATUS:
|
||||
@ -574,7 +575,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 701-800")
|
||||
{
|
||||
u32 moveStart = 700;
|
||||
u32 moveCap = 800;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
@ -643,7 +644,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 801-900")
|
||||
{
|
||||
u32 moveStart = 800;
|
||||
u32 moveCap = 900;
|
||||
|
||||
|
||||
if (moveCap > MOVES_COUNT)
|
||||
moveCap = MOVES_COUNT - 1;
|
||||
|
||||
|
||||
@ -71,10 +71,26 @@ SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Mega Evolution affects turn order")
|
||||
SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_6);
|
||||
PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(106); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
|
||||
} SCENE {
|
||||
MESSAGE("The opposing Wobbuffet used Celebrate!");
|
||||
MESSAGE("Gardevoir used Celebrate!");
|
||||
} THEN {
|
||||
ASSUME(player->speed == 205);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_7);
|
||||
PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(106); }
|
||||
} WHEN {
|
||||
@ -90,7 +106,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order")
|
||||
SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn order")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_7);
|
||||
ASSUME(GetSpeciesAbility(SPECIES_SABLEYE_MEGA, 0) != ABILITY_STALL
|
||||
&& GetSpeciesAbility(SPECIES_SABLEYE_MEGA, 1) != ABILITY_STALL);
|
||||
PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); }
|
||||
|
||||
@ -58,7 +58,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster")
|
||||
SINGLE_BATTLE_TEST("Ultra Burst affects turn order")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_MEGA_EVO_TURN_ORDER >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_7);
|
||||
PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(105); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(106); }
|
||||
} WHEN {
|
||||
|
||||
@ -6,9 +6,10 @@
|
||||
SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves do not retain priority")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks
|
||||
ASSUME(GetMoveType(MOVE_QUICK_ATTACK) == TYPE_NORMAL);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Speed(1); }
|
||||
OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_SCRATCH);
|
||||
MOVE(player, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); }
|
||||
|
||||
@ -24,6 +24,7 @@ TO_DO_BATTLE_TEST("Copycat copies moves called by other calling moves instead of
|
||||
DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their base moves copied by Copycat")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); // TODO: Decouple this config from other gimmicks
|
||||
PLAYER(SPECIES_WOBBUFFET);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_WOBBUFFET);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "test/battle.h"
|
||||
|
||||
ASSUMPTIONS
|
||||
ASSUMPTIONS
|
||||
{
|
||||
ASSUME(GetMoveEffect(MOVE_DESTINY_BOND) == EFFECT_DESTINY_BOND);
|
||||
}
|
||||
@ -21,10 +21,28 @@ SINGLE_BATTLE_TEST("Destiny Bond faints the opposing mon if it fainted from the
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Destiny Bond fails if used sequentially in Gen 7+")
|
||||
SINGLE_BATTLE_TEST("Destiny Bond doesn't fail if used sequentially (Gen2-6)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_DESTINY_BOND_FAIL >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_DESTINY_BOND_FAIL, GEN_6);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_DESTINY_BOND); }
|
||||
TURN { MOVE(player, MOVE_DESTINY_BOND); SWITCH(opponent, 1); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player);
|
||||
MESSAGE("2 sent out Zigzagoon!");
|
||||
NOT { MESSAGE("But it failed!"); }
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Destiny Bond fails if used sequentially (Gen7+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_DESTINY_BOND_FAIL, GEN_7);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
@ -39,10 +57,10 @@ SINGLE_BATTLE_TEST("Destiny Bond fails if used sequentially in Gen 7+")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Destiny Bond does not fail if used repeatedly separated by other moves in Gen 7+")
|
||||
SINGLE_BATTLE_TEST("Destiny Bond does not fail if used repeatedly separated by other moves (Gen7+)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_DESTINY_BOND_FAIL >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_DESTINY_BOND_FAIL, GEN_7);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
@ -58,10 +76,10 @@ SINGLE_BATTLE_TEST("Destiny Bond does not fail if used repeatedly separated by o
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Destiny Bond does not fail if used after failing in Gen 7+")
|
||||
SINGLE_BATTLE_TEST("Destiny Bond does not fail if used after failing (Gen7+)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_DESTINY_BOND_FAIL >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_DESTINY_BOND_FAIL, GEN_7);
|
||||
PLAYER(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
OPPONENT(SPECIES_ZIGZAGOON);
|
||||
@ -108,4 +126,3 @@ TO_DO_BATTLE_TEST("Destiny Bond's effect can trigger on the next turn if the use
|
||||
TO_DO_BATTLE_TEST("Destiny Bond can be used multiple times in a row (Gen 2-6)");
|
||||
TO_DO_BATTLE_TEST("Destiny Bond always fails if it was successfully used the previous turn (Gen 7+)");
|
||||
TO_DO_BATTLE_TEST("Destiny Bond cannot be used in Raids");
|
||||
|
||||
|
||||
@ -77,7 +77,7 @@ WILD_BATTLE_TEST("Embargo doesn't block held item effects that affect effort val
|
||||
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POWER_WEIGHT); }
|
||||
OPPONENT(SPECIES_CATERPIE) { HP(1); }
|
||||
ASSUME(gItemsInfo[ITEM_POWER_WEIGHT].holdEffect == HOLD_EFFECT_POWER_ITEM);
|
||||
ASSUME(gItemsInfo[ITEM_POWER_WEIGHT].holdEffectParam == 8);
|
||||
ASSUME(gItemsInfo[ITEM_POWER_WEIGHT].holdEffectParam != 0);
|
||||
ASSUME(gItemsInfo[ITEM_POWER_WEIGHT].secondaryId == STAT_HP);
|
||||
ASSUME(gSpeciesInfo[SPECIES_CATERPIE].evYield_HP == 1);
|
||||
} WHEN {
|
||||
|
||||
@ -119,7 +119,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use status moves if the player's best attacking
|
||||
ASSUME(GetMoveEffect(MOVE_FOCUS_PUNCH) == EFFECT_FOCUS_PUNCH);
|
||||
ASSUME(GetMoveCategory(MOVE_SWORDS_DANCE) == DAMAGE_CATEGORY_STATUS);
|
||||
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
|
||||
PLAYER(SPECIES_SNORLAX) { Moves(MOVE_FOCUS_PUNCH, MOVE_TACKLE); }
|
||||
PLAYER(SPECIES_SNORLAX) { Moves(MOVE_FOCUS_PUNCH, MOVE_POUND); }
|
||||
OPPONENT(SPECIES_CLEFABLE) { Moves(MOVE_PLAY_ROUGH, MOVE_SWORDS_DANCE); }
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_FOCUS_PUNCH); EXPECT_MOVE(opponent, MOVE_PLAY_ROUGH); }
|
||||
|
||||
@ -80,10 +80,27 @@ SINGLE_BATTLE_TEST("Powder doesn't damage target if it has Magic Guard")
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Powder doesn't damage target under heavy rain")
|
||||
SINGLE_BATTLE_TEST("Powder damages the target under heavy rain (Gen 6)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_POWDER_RAIN >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_POWDER_RAIN, GEN_6);
|
||||
PLAYER(SPECIES_KYOGRE_PRIMAL) { Ability(ABILITY_PRIMORDIAL_SEA); }
|
||||
OPPONENT(SPECIES_VIVILLON);
|
||||
} WHEN {
|
||||
TURN { MOVE(opponent, MOVE_POWDER); MOVE(player, MOVE_EMBER); }
|
||||
} SCENE {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER, opponent);
|
||||
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
|
||||
HP_BAR(player);
|
||||
} THEN {
|
||||
EXPECT_LT(player->hp, player->maxHP);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Powder doesn't damage target under heavy rain (Gen 7+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_POWDER_RAIN, GEN_7);
|
||||
PLAYER(SPECIES_KYOGRE_PRIMAL) { Ability(ABILITY_PRIMORDIAL_SEA); }
|
||||
OPPONENT(SPECIES_VIVILLON);
|
||||
} WHEN {
|
||||
@ -92,7 +109,7 @@ SINGLE_BATTLE_TEST("Powder doesn't damage target under heavy rain")
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER, opponent);
|
||||
NONE_OF {
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player);
|
||||
HP_BAR(opponent);
|
||||
HP_BAR(player);
|
||||
}
|
||||
} THEN {
|
||||
EXPECT_EQ(player->maxHP, player->hp);
|
||||
|
||||
@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Role Play copies target's ability")
|
||||
} THEN {
|
||||
EXPECT_EQ(player->ability, ABILITY_BLAZE);
|
||||
EXPECT_EQ(opponent->ability, ABILITY_BLAZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DOUBLE_BATTLE_TEST("Role Play copies target's current ability even if it changed during that turn")
|
||||
@ -93,7 +93,8 @@ SINGLE_BATTLE_TEST("Role Play fails if user's ability can't be suppressed")
|
||||
u32 species, ability;
|
||||
|
||||
PARAMETRIZE { species = SPECIES_ARCEUS; ability = ABILITY_MULTITYPE; }
|
||||
PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; }
|
||||
if (B_UPDATED_ABILITY_DATA >= GEN_7)
|
||||
PARAMETRIZE { species = SPECIES_DARMANITAN; ability = ABILITY_ZEN_MODE; }
|
||||
PARAMETRIZE { species = SPECIES_AEGISLASH; ability = ABILITY_STANCE_CHANGE; }
|
||||
PARAMETRIZE { species = SPECIES_MINIOR; ability = ABILITY_SHIELDS_DOWN; }
|
||||
PARAMETRIZE { species = SPECIES_WISHIWASHI; ability = ABILITY_SCHOOLING; }
|
||||
|
||||
@ -6,10 +6,26 @@ ASSUMPTIONS
|
||||
ASSUME(GetMoveEffect(MOVE_SHEER_COLD) == EFFECT_SHEER_COLD);
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon")
|
||||
SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon (Gen3-6)")
|
||||
{
|
||||
GIVEN {
|
||||
ASSUME(B_SHEER_COLD_IMMUNITY >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_SHEER_COLD_IMMUNITY, GEN_6);
|
||||
ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_GLALIE);
|
||||
} WHEN {
|
||||
TURN { MOVE(player, MOVE_SHEER_COLD); }
|
||||
} SCENE {
|
||||
NOT MESSAGE("It doesn't affect the opposing Glalie…");
|
||||
ANIMATION(ANIM_TYPE_MOVE, MOVE_SHEER_COLD, player);
|
||||
HP_BAR(opponent, hp: 0);
|
||||
}
|
||||
}
|
||||
|
||||
SINGLE_BATTLE_TEST("Sheer Cold doesn't affect Ice-type Pokémon (Gen7+)")
|
||||
{
|
||||
GIVEN {
|
||||
WITH_CONFIG(GEN_CONFIG_SHEER_COLD_IMMUNITY, GEN_7);
|
||||
ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_GLALIE);
|
||||
|
||||
@ -169,6 +169,7 @@ static const struct Trainer sTestTrainer2 =
|
||||
|
||||
TEST("Trainer Class Balls apply to the entire party")
|
||||
{
|
||||
ASSUME(B_TRAINER_CLASS_POKE_BALLS >= GEN_8);
|
||||
u32 j;
|
||||
struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon));
|
||||
CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER);
|
||||
|
||||
@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Enemy Mon Unaffected")
|
||||
{
|
||||
gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_ENEMY_MON_UNAFFECTED;
|
||||
GIVEN {
|
||||
ASSUME(B_SHEER_COLD_IMMUNITY >= GEN_7);
|
||||
WITH_CONFIG(GEN_CONFIG_SHEER_COLD_IMMUNITY, GEN_7);
|
||||
ASSUME(GetSpeciesType(SPECIES_GLALIE, 0) == TYPE_ICE);
|
||||
PLAYER(SPECIES_WYNAUT);
|
||||
OPPONENT(SPECIES_GLALIE);
|
||||
|
||||
@ -1564,9 +1564,14 @@ void OpenPokemon(u32 sourceLine, u32 side, u32 species)
|
||||
(*partySize)++;
|
||||
|
||||
CreateMon(DATA.currentMon, species, 100, 0, TRUE, 0, OT_ID_PRESET, 0);
|
||||
data = MOVE_NONE;
|
||||
// Reset move IDs, but force PP to be non-zero. This is a safeguard against test species that only learn 1 move having test moves with 0 PP
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
data = MOVE_NONE;
|
||||
SetMonData(DATA.currentMon, MON_DATA_MOVE1 + i, &data);
|
||||
data = 0x7F; // Max PP possible
|
||||
SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &data);
|
||||
}
|
||||
data = 0;
|
||||
if (B_FRIENDSHIP_BOOST)
|
||||
{
|
||||
@ -2112,6 +2117,7 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 *
|
||||
SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &pp);
|
||||
*moveSlot = i;
|
||||
*moveId = ctx->move;
|
||||
INVALID_IF(GetMovePP(ctx->move) == 0, "%S has 0 PP!", GetMoveName(ctx->move));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -2216,7 +2222,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
|
||||
DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect;
|
||||
if (ctx.explicitRNG)
|
||||
DATA.battleRecordTurns[DATA.turns][battlerId].rng = ctx.rng;
|
||||
|
||||
|
||||
u32 shellSideArmCount = 0;
|
||||
for (u32 i = 0; i < STATE->battlersCount; i++)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user