2024-09-09 15:42:53 +08:00
import { BattlerIndex } from "#app/battle" ;
2024-11-08 14:44:34 -08:00
import { Type } from "#enums/type" ;
2024-09-09 15:42:53 +08:00
import { Moves } from "#app/enums/moves" ;
import { Species } from "#app/enums/species" ;
import { Stat } from "#app/enums/stat" ;
import { Abilities } from "#enums/abilities" ;
2025-02-22 22:52:07 -06:00
import GameManager from "#test/testUtils/gameManager" ;
2024-09-09 15:42:53 +08:00
import Phaser from "phaser" ;
import { afterEach , beforeAll , beforeEach , describe , expect , it , vi } from "vitest" ;
describe ( "Moves - Tar Shot" , ( ) = > {
let phaserGame : Phaser.Game ;
let game : GameManager ;
beforeAll ( ( ) = > {
phaserGame = new Phaser . Game ( {
type : Phaser . HEADLESS ,
} ) ;
} ) ;
afterEach ( ( ) = > {
game . phaseInterceptor . restoreOg ( ) ;
} ) ;
beforeEach ( ( ) = > {
game = new GameManager ( phaserGame ) ;
game . override
. battleType ( "single" )
. enemyAbility ( Abilities . BALL_FETCH )
2024-09-10 03:02:11 +08:00
. enemyMoveset ( Moves . SPLASH )
2024-09-09 15:42:53 +08:00
. enemySpecies ( Species . TANGELA )
. enemyLevel ( 1000 )
2024-10-04 13:08:31 +08:00
. moveset ( [ Moves . TAR_SHOT , Moves . FIRE_PUNCH ] )
2024-09-09 15:42:53 +08:00
. disableCrits ( ) ;
} ) ;
it ( "lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target" , async ( ) = > {
2024-10-04 13:08:31 +08:00
await game . classicMode . startBattle ( [ Species . PIKACHU ] ) ;
2024-09-09 15:42:53 +08:00
const enemy = game . scene . getEnemyPokemon ( ) ! ;
vi . spyOn ( enemy , "getMoveEffectiveness" ) ;
game . move . select ( Moves . TAR_SHOT ) ;
await game . phaseInterceptor . to ( "TurnEndPhase" ) ;
expect ( enemy . getStatStage ( Stat . SPD ) ) . toBe ( - 1 ) ;
await game . toNextTurn ( ) ;
game . move . select ( Moves . FIRE_PUNCH ) ;
2024-10-04 13:08:31 +08:00
await game . setTurnOrder ( [ BattlerIndex . PLAYER , BattlerIndex . ENEMY ] ) ;
2024-09-09 15:42:53 +08:00
await game . phaseInterceptor . to ( "MoveEndPhase" ) ;
expect ( enemy . getMoveEffectiveness ) . toHaveReturnedWith ( 4 ) ;
2024-09-20 14:05:45 -07:00
} ) ;
2024-09-09 15:42:53 +08:00
it ( "will not double the effectiveness of Fire-type moves used on a target that is already under the effect of Tar Shot (but may still lower its Speed)" , async ( ) = > {
2024-10-04 13:08:31 +08:00
await game . classicMode . startBattle ( [ Species . PIKACHU ] ) ;
2024-09-09 15:42:53 +08:00
const enemy = game . scene . getEnemyPokemon ( ) ! ;
vi . spyOn ( enemy , "getMoveEffectiveness" ) ;
game . move . select ( Moves . TAR_SHOT ) ;
await game . phaseInterceptor . to ( "TurnEndPhase" ) ;
expect ( enemy . getStatStage ( Stat . SPD ) ) . toBe ( - 1 ) ;
await game . toNextTurn ( ) ;
game . move . select ( Moves . TAR_SHOT ) ;
await game . phaseInterceptor . to ( "TurnEndPhase" ) ;
expect ( enemy . getStatStage ( Stat . SPD ) ) . toBe ( - 2 ) ;
await game . toNextTurn ( ) ;
game . move . select ( Moves . FIRE_PUNCH ) ;
2024-10-04 13:08:31 +08:00
await game . setTurnOrder ( [ BattlerIndex . PLAYER , BattlerIndex . ENEMY ] ) ;
2024-09-09 15:42:53 +08:00
await game . phaseInterceptor . to ( "MoveEndPhase" ) ;
expect ( enemy . getMoveEffectiveness ) . toHaveReturnedWith ( 4 ) ;
2024-09-20 14:05:45 -07:00
} ) ;
2024-09-09 15:42:53 +08:00
it ( "does not double the effectiveness of Fire-type moves against a Pokémon that is Terastallized" , async ( ) = > {
2025-02-17 08:20:50 +11:00
game . override . enemySpecies ( Species . SPRIGATITO ) ;
2024-10-04 13:08:31 +08:00
await game . classicMode . startBattle ( [ Species . PIKACHU ] ) ;
2024-09-09 15:42:53 +08:00
const enemy = game . scene . getEnemyPokemon ( ) ! ;
2025-02-17 08:20:50 +11:00
enemy . teraType = Type . GRASS ;
enemy . isTerastallized = true ;
2024-09-09 15:42:53 +08:00
vi . spyOn ( enemy , "getMoveEffectiveness" ) ;
game . move . select ( Moves . TAR_SHOT ) ;
await game . phaseInterceptor . to ( "TurnEndPhase" ) ;
expect ( enemy . getStatStage ( Stat . SPD ) ) . toBe ( - 1 ) ;
await game . toNextTurn ( ) ;
game . move . select ( Moves . FIRE_PUNCH ) ;
2024-10-04 13:08:31 +08:00
await game . setTurnOrder ( [ BattlerIndex . PLAYER , BattlerIndex . ENEMY ] ) ;
2024-09-09 15:42:53 +08:00
await game . phaseInterceptor . to ( "MoveEndPhase" ) ;
expect ( enemy . getMoveEffectiveness ) . toHaveReturnedWith ( 2 ) ;
2024-09-20 14:05:45 -07:00
} ) ;
2024-09-09 15:42:53 +08:00
it ( "doubles the effectiveness of Fire-type moves against a Pokémon that is already under the effects of Tar Shot before it Terastallized" , async ( ) = > {
game . override . enemySpecies ( Species . SPRIGATITO ) ;
2024-10-04 13:08:31 +08:00
await game . classicMode . startBattle ( [ Species . PIKACHU ] ) ;
2024-09-09 15:42:53 +08:00
const enemy = game . scene . getEnemyPokemon ( ) ! ;
vi . spyOn ( enemy , "getMoveEffectiveness" ) ;
game . move . select ( Moves . TAR_SHOT ) ;
await game . phaseInterceptor . to ( "TurnEndPhase" ) ;
expect ( enemy . getStatStage ( Stat . SPD ) ) . toBe ( - 1 ) ;
await game . toNextTurn ( ) ;
2025-02-17 08:20:50 +11:00
enemy . teraType = Type . GRASS ;
enemy . isTerastallized = true ;
2024-09-09 15:42:53 +08:00
game . move . select ( Moves . FIRE_PUNCH ) ;
2024-10-04 13:08:31 +08:00
await game . setTurnOrder ( [ BattlerIndex . PLAYER , BattlerIndex . ENEMY ] ) ;
2024-09-09 15:42:53 +08:00
await game . phaseInterceptor . to ( "MoveEndPhase" ) ;
expect ( enemy . getMoveEffectiveness ) . toHaveReturnedWith ( 4 ) ;
2024-09-20 14:05:45 -07:00
} ) ;
2024-09-09 15:42:53 +08:00
} ) ;