Fix Magnetic Flux target handling in singles (#9007)

This commit is contained in:
GGbond 2026-01-24 15:45:19 +08:00 committed by GitHub
parent 7722ebf470
commit e871913e22
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 108 additions and 16 deletions

View File

@ -1259,6 +1259,7 @@ BattleScript_EffectAromaticMistWontGoHigher:
BattleScript_EffectMagneticFlux::
attackcanceler
savetarget
setbyte gBattleCommunication, 0
BattleScript_EffectMagneticFluxStart:
jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectMagneticFluxCheckStats
@ -1287,13 +1288,16 @@ BattleScript_EffectMagneticFluxTrySpDef:
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectMagneticFluxLoop:
jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectMagneticFluxEnd
jumpifnoally BS_ATTACKER, BattleScript_EffectMagneticFluxEnd
setallytonexttarget BattleScript_EffectMagneticFluxStart
BattleScript_EffectMagneticFluxEnd:
restoretarget
jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd
goto BattleScript_ButItFailed
BattleScript_EffectGearUp::
attackcanceler
savetarget
setbyte gBattleCommunication, 0
BattleScript_EffectGearUpStart:
jumpifability BS_TARGET, ABILITY_MINUS, BattleScript_EffectGearUpCheckStats
@ -1322,8 +1326,10 @@ BattleScript_EffectGearUpTrySpAtk:
waitmessage B_WAIT_TIME_LONG
BattleScript_EffectGearUpLoop:
jumpifbytenotequal gBattlerTarget, gBattlerAttacker, BattleScript_EffectGearUpEnd
jumpifnoally BS_ATTACKER, BattleScript_EffectGearUpEnd
setallytonexttarget BattleScript_EffectGearUpStart
BattleScript_EffectGearUpEnd:
restoretarget
jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_MoveEnd
goto BattleScript_ButItFailed

View File

@ -880,3 +880,29 @@ AI_DOUBLE_BATTLE_TEST("AI prefers to Fake Out the opponent vulnerable to flinchi
TURN { EXPECT_MOVE(opponentLeft, MOVE_FAKE_OUT, target:playerRight); }
}
}
AI_DOUBLE_BATTLE_TEST("AI uses Gear Up")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); }
}
}
AI_DOUBLE_BATTLE_TEST("AI uses Magnetic Flux")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); }
}
}

View File

@ -1,17 +1,47 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("Gear Up increases the Attack and Sp. Attack of the user and allies if they have Plus or Minus")
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_GEAR_UP) == EFFECT_GEAR_UP);
}
AI_DOUBLE_BATTLE_TEST("AI uses Gear Up")
SINGLE_BATTLE_TEST("Gear Up raises Attack and Sp. Attack of the user with Plus/Minus in singles")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); }
PLAYER(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
OPPONENT(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); }
TURN { MOVE(player, MOVE_GEAR_UP); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_GEAR_UP, player);
} THEN {
EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE);
}
}
DOUBLE_BATTLE_TEST("Gear Up raises Attack and Sp. Attack of all Plus/Minus allies in doubles")
{
GIVEN {
PLAYER(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
PLAYER(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
OPPONENT(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
OPPONENT(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_GEAR_UP); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_GEAR_UP, playerLeft);
} THEN {
EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(opponentLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE);
}
}

View File

@ -1,17 +1,47 @@
#include "global.h"
#include "test/battle.h"
TO_DO_BATTLE_TEST("TODO: Write Magnetic Flux (Move Effect) test titles")
ASSUMPTIONS
{
ASSUME(GetMoveEffect(MOVE_MAGNETIC_FLUX) == EFFECT_MAGNETIC_FLUX);
}
AI_DOUBLE_BATTLE_TEST("AI uses Magnetic Flux")
SINGLE_BATTLE_TEST("Magnetic Flux raises Defense and Sp. Defense of the user with Plus/Minus in singles")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT);
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_POUND, MOVE_CELEBRATE); }
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); }
PLAYER(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
OPPONENT(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
} WHEN {
TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); }
TURN { MOVE(player, MOVE_MAGNETIC_FLUX); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGNETIC_FLUX, player);
} THEN {
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE);
}
}
DOUBLE_BATTLE_TEST("Magnetic Flux raises Defense and Sp. Defense of all Plus/Minus allies in doubles")
{
GIVEN {
PLAYER(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
PLAYER(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
OPPONENT(SPECIES_PLUSLE) { Ability(ABILITY_PLUS); }
OPPONENT(SPECIES_MINUN) { Ability(ABILITY_MINUS); }
} WHEN {
TURN { MOVE(playerLeft, MOVE_MAGNETIC_FLUX); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_MAGNETIC_FLUX, playerLeft);
} THEN {
EXPECT_EQ(playerLeft->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerLeft->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerRight->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(playerRight->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1);
EXPECT_EQ(opponentLeft->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentLeft->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentRight->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponentRight->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE);
}
}