diff --git a/src/battle-animations.ts b/src/battle-animations.ts index f0c82b890..97f56551e 100644 --- a/src/battle-animations.ts +++ b/src/battle-animations.ts @@ -1200,6 +1200,12 @@ class BattleScene { } } + typeAnim(pokemon: Pokemon, types: string) { + const result = BattleLog.escapeHTML(types).split('/').map(type => + '' + type + '' + ).join(' '); + this.resultAnim(pokemon, types, 'neutral'); + } resultAnim(pokemon: Pokemon, result: string, type: 'bad' | 'good' | 'neutral' | StatusName) { if (!this.animating) return; let $effect = $('
' + result + '
'); diff --git a/src/battle-scene-stub.ts b/src/battle-scene-stub.ts index 1ff858d3a..cdec3f1c5 100644 --- a/src/battle-scene-stub.ts +++ b/src/battle-scene-stub.ts @@ -28,6 +28,7 @@ class BattleSceneStub { removeSideCondition(siden: number, id: ID): void { } reset(): void { } resultAnim(pokemon: Pokemon, result: string, type: "bad" | "good" | "neutral" | "par" | "psn" | "frz" | "slp" | "brn"): void { } + typeAnim(pokemon: Pokemon, types: string): void { } resume(): void { } runMoveAnim(moveid: ID, participants: Pokemon[]): void { } runOtherAnim(moveid: ID, participants: Pokemon[]): void { } diff --git a/src/battle.ts b/src/battle.ts index f612f93c9..cb3749e87 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -2086,22 +2086,20 @@ class Battle { this.activateAbility(ofpoke || poke, fromeffect); switch (effect.id) { case 'typechange': - const types = BattleLog.escapeHTML(args[3]); + const types = Tools.sanitizeName(args[3]); poke.removeVolatile('typeadd' as ID); poke.addVolatile('typechange' as ID, types); if (kwArgs.silent) { this.scene.updateStatbar(poke); break; } - this.scene.resultAnim(poke, types.split('/').map(function (type) { - return '' + type + ''; - }).join(' '), 'neutral'); + this.scene.typeAnim(poke, types); break; case 'typeadd': - const type = BattleLog.escapeHTML(args[3]); + const type = Tools.sanitizeName(args[3]); poke.addVolatile('typeadd' as ID, type); if (kwArgs.silent) break; - this.scene.resultAnim(poke, '' + type + '', 'neutral'); + this.scene.typeAnim(poke, type); break; case 'powertrick': this.scene.resultAnim(poke, 'Power Trick', 'neutral'); @@ -2444,8 +2442,9 @@ class Battle { break; case 'spite': let move = Tools.getMove(args[3]).name; - let pp = BattleLog.escapeHTML(args[4]); - poke.rememberMove(move, Number(pp)); + let pp = Number(args[4]); + if (isNaN(pp)) pp = 4; + poke.rememberMove(move, pp); break; case 'gravity': poke.removeVolatile('magnetrise' as ID); @@ -2454,8 +2453,8 @@ class Battle { break; case 'skillswap': if (this.gen <= 4) break; - let pokeability = BattleLog.escapeHTML(args[3]) || ofpoke!.ability; - let ofpokeability = BattleLog.escapeHTML(args[4]) || poke.ability; + let pokeability = Tools.sanitizeName(args[3]) || ofpoke!.ability; + let ofpokeability = Tools.sanitizeName(args[4]) || poke.ability; if (pokeability) { poke.ability = pokeability; if (!ofpoke!.baseAbility) ofpoke!.baseAbility = pokeability; diff --git a/test/battle-test.mocha.js b/test/battle-test.mocha.js index f3c62d686..964be3237 100644 --- a/test/battle-test.mocha.js +++ b/test/battle-test.mocha.js @@ -8,7 +8,6 @@ window = global; // Without making these modules, the best we can do is directly include them into this workspace. eval('' + fs.readFileSync(`js/battle-scene-stub.js`)); -eval('' + fs.readFileSync(`js/battle-log.js`)); eval('' + fs.readFileSync(`js/battle-dex.js`)); eval('' + fs.readFileSync(`js/battle-dex-data.js`)); eval('' + fs.readFileSync(`js/battle.js`));