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 =>
+ '
'
+ ).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 '
';
- }).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, '
', '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`));