Logger updates

Log trainers
Log Pokemon correctly
Log moves / actions
This commit is contained in:
RedstonewolfX 2024-07-11 23:14:13 -04:00
parent 63f9988cb8
commit 8c12cb5483
2 changed files with 175 additions and 42 deletions

View File

@ -105,6 +105,8 @@ export interface ItemData {
quantity: integer, quantity: integer,
} }
export const Actions = []
export function newDocument(name: string = "Untitled Run", authorName: string | string[] = "Write your name here"): DRPD { export function newDocument(name: string = "Untitled Run", authorName: string | string[] = "Write your name here"): DRPD {
return { return {
version: DRPD_Version, version: DRPD_Version,
@ -191,6 +193,20 @@ export function exportWave(scene: BattleScene): Wave {
return ret; return ret;
} }
export function exportTrainer(trainer: Trainer): TrainerData { export function exportTrainer(trainer: Trainer): TrainerData {
if (trainer.config.getTitle(0, trainer.variant) == "Finn") {
return {
id: trainer.config.trainerType,
name: "Finn",
type: "Rival"
}
}
if (trainer.config.getTitle(0, trainer.variant) == "Ivy") {
return {
id: trainer.config.trainerType,
name: "Ivy",
type: "Rival"
}
}
return { return {
id: trainer.config.trainerType, id: trainer.config.trainerType,
name: trainer.name, name: trainer.name,
@ -213,7 +229,7 @@ export function getSize(str: string) {
export function generateOption(i: integer): OptionSelectItem { export function generateOption(i: integer): OptionSelectItem {
var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title var filename: string = (JSON.parse(localStorage.getItem(logs[i][1])) as DRPD).title
var op: OptionSelectItem = { var op: OptionSelectItem = {
label: ` Export ${filename} (${getSize(localStorage.getItem(logs[i][1]))})`, label: ` Export ${filename} (${getSize(printDRPD("", "", JSON.parse(localStorage.getItem(logs[i][1])) as DRPD))})`,
handler: () => { handler: () => {
downloadLogByID(i) downloadLogByID(i)
return false; return false;
@ -266,7 +282,7 @@ export function clearLog(keyword: string) {
*/ */
export function downloadLog(keyword: string) { export function downloadLog(keyword: string) {
var d = JSON.parse(localStorage.getItem(logs[logKeys.indexOf(keyword)][1])) var d = JSON.parse(localStorage.getItem(logs[logKeys.indexOf(keyword)][1]))
const blob = new Blob([ JSON.stringify(d) ], {type: "text/json"}); const blob = new Blob([ printDRPD("", "", d as DRPD) ], {type: "text/json"});
const link = document.createElement("a"); const link = document.createElement("a");
link.href = window.URL.createObjectURL(blob); link.href = window.URL.createObjectURL(blob);
var date: string = (d as DRPD).date var date: string = (d as DRPD).date
@ -303,6 +319,14 @@ export function logTeam(scene: BattleScene, floor: integer = undefined) {
} }
} }
} }
export function logActions(scene: BattleScene, floor: integer, action: string) {
if (localStorage.getItem("drpd") == null) localStorage.setItem("drpd", JSON.stringify(newDocument()))
var drpd: DRPD = JSON.parse(localStorage.getItem("drpd")) as DRPD;
var wv: Wave = getWave(drpd, floor, scene)
wv.actions.push(action)
console.log(drpd)
localStorage.setItem("drpd", JSON.stringify(drpd))
}
export function getWave(drpd: DRPD, floor: integer, scene: BattleScene) { export function getWave(drpd: DRPD, floor: integer, scene: BattleScene) {
var wv: Wave; var wv: Wave;
var insertPos: integer; var insertPos: integer;
@ -335,6 +359,18 @@ export function getWave(drpd: DRPD, floor: integer, scene: BattleScene) {
if (b == undefined) return -1; // empty values move to the bottom if (b == undefined) return -1; // empty values move to the bottom
return a.id - b.id return a.id - b.id
}) })
for (var i = 0; i < drpd.waves.length - 1; i++) {
if (drpd.waves[i] != undefined && drpd.waves[i+1] != undefined) {
if (drpd.waves[i].id == drpd.waves[i+1].id) {
drpd.waves[i] = undefined
drpd.waves.sort((a, b) => {
if (a == undefined) return 1; // empty values move to the bottom
if (b == undefined) return -1; // empty values move to the bottom
return a.id - b.id
})
}
}
}
if (wv == undefined) { if (wv == undefined) {
console.error("Out of wave slots??") console.error("Out of wave slots??")
scene.ui.showText("Out of wave slots!\nClearing duplicates...", null, () => { scene.ui.showText("Out of wave slots!\nClearing duplicates...", null, () => {
@ -394,26 +430,6 @@ export function getWave(drpd: DRPD, floor: integer, scene: BattleScene) {
} }
return wv; return wv;
} }
/*
const entry = tierPool[Utils.randSeedInt(tierPool.length)];
let species: Species;
if (typeof entry === "number") {
species = entry as Species;
} else {
const levelThresholds = Object.keys(entry);
for (let l = levelThresholds.length - 1; l >= 0; l--) {
const levelThreshold = parseInt(levelThresholds[l]);
if (level >= levelThreshold) {
const speciesIds = entry[levelThreshold];
if (speciesIds.length > 1) {
species = speciesIds[Utils.randSeedInt(speciesIds.length)];
} else {
species = speciesIds[0];
}
break;
}
}
}*/
function checkForPokeInBiome(species: Species, pool: (Species | SpeciesTree)[]): boolean { function checkForPokeInBiome(species: Species, pool: (Species | SpeciesTree)[]): boolean {
//console.log(species, pool) //console.log(species, pool)
for (var i = 0; i < pool.length; i++) { for (var i = 0; i < pool.length; i++) {
@ -512,16 +528,25 @@ export function logPokemon(scene: BattleScene, floor: integer = undefined, slot:
"Ultra Rare", "Ultra Rare",
] ]
for (var i = 0; i < tiernames.length; i++) { for (var i = 0; i < tiernames.length; i++) {
if (wv.pokemon[slot] != undefined)
if (checkForPokeInBiome(wv.pokemon[slot].id, scene.arena.pokemonPool[i]) == true) { if (checkForPokeInBiome(wv.pokemon[slot].id, scene.arena.pokemonPool[i]) == true) {
console.log("Autofilled rarity for " + pk.name + " as " + tiernames[i]) console.log("Autofilled rarity for " + pk.name + " as " + tiernames[i])
pk.rarity = tiernames[i] pk.rarity = tiernames[i]
} }
} }
} }
if (pk.rarity == undefined) pk.rarity = "[Unknown]"
wv.pokemon[slot] = pk; wv.pokemon[slot] = pk;
console.log(drpd) console.log(drpd)
localStorage.setItem("drpd", JSON.stringify(drpd)) localStorage.setItem("drpd", JSON.stringify(drpd))
} }
export function resetWave(scene: BattleScene, floor: integer = undefined) {
if (localStorage.getItem("drpd") == null) localStorage.setItem("drpd", JSON.stringify(newDocument()))
var drpd: DRPD = JSON.parse(localStorage.getItem("drpd")) as DRPD;
drpd.waves[floor] = exportWave(scene)
console.log(drpd)
localStorage.setItem("drpd", JSON.stringify(drpd))
}
export function logTrainer(scene: BattleScene, floor: integer = undefined) { export function logTrainer(scene: BattleScene, floor: integer = undefined) {
if (localStorage.getItem("drpd") == null) localStorage.setItem("drpd", JSON.stringify(newDocument())) if (localStorage.getItem("drpd") == null) localStorage.setItem("drpd", JSON.stringify(newDocument()))
var drpd: DRPD = JSON.parse(localStorage.getItem("drpd")) as DRPD; var drpd: DRPD = JSON.parse(localStorage.getItem("drpd")) as DRPD;
@ -650,25 +675,31 @@ function printWave(inData: string, indent: string, wave: Wave): string {
inData += ",\n" + indent + " \"reload\": " + wave.reload + "" inData += ",\n" + indent + " \"reload\": " + wave.reload + ""
inData += ",\n" + indent + " \"type\": \"" + wave.type + "\"" inData += ",\n" + indent + " \"type\": \"" + wave.type + "\""
inData += ",\n" + indent + " \"double\": " + wave.double + "" inData += ",\n" + indent + " \"double\": " + wave.double + ""
inData += ",\n" + indent + " \"actions\": [\n"
var isFirst = true var isFirst = true
for (var i = 0; i < wave.actions.length; i++) { if (wave.actions.length > 0) {
if (wave.actions[i] != undefined) { inData += ",\n" + indent + " \"actions\": ["
if (isFirst) { for (var i = 0; i < wave.actions.length; i++) {
isFirst = false; if (wave.actions[i] != undefined) {
} else { if (isFirst) {
inData += "," isFirst = false;
} else {
inData += ","
}
inData += "\n " + indent + "\"" + wave.actions[i] + "\""
} }
inData += "\n " + indent + "\"" + wave.actions[i] + "\""
} }
if (!isFirst) inData += "\n"
inData += indent + " ]"
} else {
inData += ",\n" + indent + " \"actions\": []"
} }
if (!isFirst) inData += "\n"
inData += indent + " ]"
inData += ",\n " + indent + "\"shop\": \"" + wave.shop + "\"" inData += ",\n " + indent + "\"shop\": \"" + wave.shop + "\""
inData += ",\n " + indent + "\"biome\": \"" + wave.biome + "\"" inData += ",\n " + indent + "\"biome\": \"" + wave.biome + "\""
if (wave.trainer) if (wave.trainer) {
inData += ",\n " + indent + "\"trainer\": " + wave.trainer inData += ",\n " + indent + "\"trainer\": "
if (wave.pokemon) { inData = printTrainer(inData, indent + " ", wave.trainer)
}
if (wave.pokemon.length > 0) {
inData += ",\n " + indent + "\"pokemon\": [\n" inData += ",\n " + indent + "\"pokemon\": [\n"
isFirst = true isFirst = true
for (var i = 0; i < wave.pokemon.length; i++) { for (var i = 0; i < wave.pokemon.length; i++) {
@ -681,12 +712,12 @@ function printWave(inData: string, indent: string, wave: Wave): string {
inData = printPoke(inData, indent + " ", wave.pokemon[i]) inData = printPoke(inData, indent + " ", wave.pokemon[i])
} }
} }
inData += "\n" + indent + " ]"
} }
inData += "\n" + indent + " ]\n" + indent + "}" inData += "\n" + indent + "}"
return inData; return inData;
} }
function printPoke(inData: string, indent: string, pokemon: PokeData) { function printPoke(inData: string, indent: string, pokemon: PokeData) {
var itemdata: string = ""
inData += indent + "{" inData += indent + "{"
inData += "\n" + indent + " \"id\": " + pokemon.id inData += "\n" + indent + " \"id\": " + pokemon.id
inData += ",\n" + indent + " \"name\": \"" + pokemon.name + "\"" inData += ",\n" + indent + " \"name\": \"" + pokemon.name + "\""
@ -743,7 +774,7 @@ function printIV(inData: string, indent: string, iv: IVData) {
return inData; return inData;
} }
function printTrainer(inData: string, indent: string, trainer: TrainerData) { function printTrainer(inData: string, indent: string, trainer: TrainerData) {
inData += indent + "{" inData += "{"
inData += "\n" + indent + " \"id\": \"" + trainer.id + "\"" inData += "\n" + indent + " \"id\": \"" + trainer.id + "\""
inData += ",\n" + indent + " \"name\": \"" + trainer.name + "\"" inData += ",\n" + indent + " \"name\": \"" + trainer.name + "\""
inData += ",\n" + indent + " \"type\": \"" + trainer.type + "\"" inData += ",\n" + indent + " \"type\": \"" + trainer.type + "\""

View File

@ -26,7 +26,7 @@ import { Gender } from "./data/gender";
import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather"; import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather";
import { TempBattleStat } from "./data/temp-battle-stat"; import { TempBattleStat } from "./data/temp-battle-stat";
import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag"; import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag";
import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, IgnoreOpponentEvasionAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, WonderSkinAbAttr, applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr, AddSecondStrikeAbAttr } from "./data/ability"; import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, IgnoreOpponentEvasionAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, WonderSkinAbAttr, applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr, AddSecondStrikeAbAttr, BattlerTagImmunityAbAttr } from "./data/ability";
import { Unlockables, getUnlockableName } from "./system/unlockables"; import { Unlockables, getUnlockableName } from "./system/unlockables";
import { getBiomeKey } from "./field/arena"; import { getBiomeKey } from "./field/arena";
import { BattleType, BattlerIndex, TurnCommand } from "./battle"; import { BattleType, BattlerIndex, TurnCommand } from "./battle";
@ -465,7 +465,7 @@ export class TitlePhase extends Phase {
// If there are no daily runs, it instead shows the most recently saved run // If there are no daily runs, it instead shows the most recently saved run
// If this fails too, there are no saves, and the option does not appear // If this fails too, there are no saves, and the option does not appear
var lastsaves = this.getSaves(false, true); var lastsaves = this.getSaves(false, true);
if (lastsaves != undefined) { if (lastsaves != undefined && lastsaves.length > 0) {
lastsaves.forEach(lastsave => { lastsaves.forEach(lastsave => {
options.push({ options.push({
label: (lastsave.description ? lastsave.description : "[???]"), label: (lastsave.description ? lastsave.description : "[???]"),
@ -1324,6 +1324,7 @@ export class EncounterPhase extends BattlePhase {
doEncounterCommon(showEncounterMessage: boolean = true) { doEncounterCommon(showEncounterMessage: boolean = true) {
const enemyField = this.scene.getEnemyField(); const enemyField = this.scene.getEnemyField();
LoggerTools.resetWave(this.scene, this.scene.currentBattle.waveIndex)
LoggerTools.logTeam(this.scene, this.scene.currentBattle.waveIndex) LoggerTools.logTeam(this.scene, this.scene.currentBattle.waveIndex)
if (this.scene.getEnemyParty()[0].hasTrainer()) { if (this.scene.getEnemyParty()[0].hasTrainer()) {
LoggerTools.logTrainer(this.scene, this.scene.currentBattle.waveIndex) LoggerTools.logTrainer(this.scene, this.scene.currentBattle.waveIndex)
@ -2683,6 +2684,34 @@ export class TurnStartPhase extends FieldPhase {
super(scene); super(scene);
} }
generateTargString(t: BattlerIndex[]) {
var targets = ['Self']
for (var i = 0; i < this.scene.getField().length; i++) {
if (this.scene.getField()[i] != null)
targets[this.scene.getField()[i].getBattlerIndex() + 1] = this.scene.getField()[i].name
}
for (var i = 0; i < this.scene.getEnemyField().length; i++) {
if (this.scene.getEnemyField()[i] != null)
targets[this.scene.getEnemyField()[i].getBattlerIndex() + 1] = this.scene.getEnemyField()[i].name
}
var targetFull = []
for (var i = 0; i < t.length; i++) {
targetFull.push(targets[t[i] + 1])
}
if (targetFull.join(", ") == targets.join(", ")) return ""
return " → " + targetFull.join(", ")
}
getBattlers(user: Pokemon): Pokemon[] {
var battlers = []
battlers[0] = this.scene.getField()[0]
battlers[1] = this.scene.getField()[1]
battlers[2] = this.scene.getEnemyField()[0]
battlers[3] = this.scene.getEnemyField()[1]
battlers.unshift(user)
return battlers;
}
start() { start() {
super.start(); super.start();
@ -2691,6 +2720,70 @@ export class TurnStartPhase extends FieldPhase {
const battlerBypassSpeed = {}; const battlerBypassSpeed = {};
const playerActions = []
const moveOrder = order.slice(0);
while (LoggerTools.Actions.length > 0) {
LoggerTools.Actions.pop()
}
for (const o of moveOrder) {
const pokemon = field[o];
const turnCommand = this.scene.currentBattle.turnCommands[o];
if (turnCommand.skip || !pokemon.isPlayer()) {
continue;
}
switch (turnCommand.command) {
case Command.FIGHT:
const queuedMove = turnCommand.move;
if (!queuedMove) {
continue;
}
const move = pokemon.getMoveset().find(m => m.moveId === queuedMove.move) || new PokemonMove(queuedMove.move);
if (!this.scene.currentBattle.double) {
playerActions.push(move.getName())
} else {
var T = this.getBattlers(pokemon)
for (var i = 0; i < T.length; i++) {
if (T[i] == undefined) {
T.splice(i, 1)
i--
}
}
console.log(queuedMove.targets, T, queuedMove.targets.map(p => T[p+1].name))
playerActions.push(move.getName() + " → " + queuedMove.targets.map(p => T[p+1].name).join(", "))
}
break;
case Command.BALL:
var ballNames = [
"Poké Ball",
"Great Ball",
"Ultra Ball",
"Rogue Ball",
"Master Ball",
"Luxury Ball"
]
LoggerTools.Actions[pokemon.getBattlerIndex()] = ballNames[turnCommand.cursor]
playerActions.push(ballNames[turnCommand.cursor])
//this.scene.unshiftPhase(new AttemptCapturePhase(this.scene, turnCommand.targets[0] % 2, turnCommand.cursor));
break;
case Command.POKEMON:
LoggerTools.Actions[pokemon.getBattlerIndex()] = "Switch " + this.scene.getParty()[pokemon.getFieldIndex()].name + " to " + this.scene.getParty()[turnCommand.cursor].name
//playerActions.push("Switch " + this.scene.getParty()[pokemon.getFieldIndex()].name + " to " + this.scene.getParty()[turnCommand.cursor].name)
//this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, pokemon.getFieldIndex(), turnCommand.cursor, true, turnCommand.args[0] as boolean, pokemon.isPlayer()));
break;
case Command.RUN:
LoggerTools.Actions[pokemon.getBattlerIndex()] = "Run"
playerActions.push("Run")
break;
}
}
//LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, playerActions.join(" | "))
this.scene.getField(true).filter(p => p.summonData).map(p => { this.scene.getField(true).filter(p => p.summonData).map(p => {
const bypassSpeed = new Utils.BooleanHolder(false); const bypassSpeed = new Utils.BooleanHolder(false);
applyAbAttrs(BypassSpeedChanceAbAttr, p, null, bypassSpeed); applyAbAttrs(BypassSpeedChanceAbAttr, p, null, bypassSpeed);
@ -2698,8 +2791,6 @@ export class TurnStartPhase extends FieldPhase {
battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed; battlerBypassSpeed[p.getBattlerIndex()] = bypassSpeed;
}); });
const moveOrder = order.slice(0);
moveOrder.sort((a, b) => { moveOrder.sort((a, b) => {
const aCommand = this.scene.currentBattle.turnCommands[a]; const aCommand = this.scene.currentBattle.turnCommands[a];
const bCommand = this.scene.currentBattle.turnCommands[b]; const bCommand = this.scene.currentBattle.turnCommands[b];
@ -2906,6 +2997,8 @@ export class TurnEndPhase extends FieldPhase {
this.scene.arena.trySetTerrain(TerrainType.NONE, false); this.scene.arena.trySetTerrain(TerrainType.NONE, false);
} }
LoggerTools.logActions(this.scene, this.scene.currentBattle.waveIndex, LoggerTools.Actions.join(" | "))
this.end(); this.end();
} }
} }
@ -3163,6 +3256,15 @@ export class MovePhase extends BattlePhase {
if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) {
this.scene.currentBattle.lastMove = this.move.moveId; this.scene.currentBattle.lastMove = this.move.moveId;
} }
if (this.pokemon.isPlayer()) {
LoggerTools.Actions[this.pokemon.getBattlerIndex()] = this.move.getName()
if (this.scene.currentBattle.double) {
var targIDs = ["Counter", "Self", "Ally", "L", "R"]
if (this.pokemon.getBattlerIndex() == 1) targIDs = ["Counter", "Ally", "Self", "L", "R"]
LoggerTools.Actions[this.pokemon.getBattlerIndex()] += " → " + this.targets.map(v => targIDs[v+1])
}
console.log(this.move.getName(), this.targets)
}
// Assume conditions affecting targets only apply to moves with a single target // Assume conditions affecting targets only apply to moves with a single target
let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove()); let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove());