@pkmn/sim 0.9.30 → 0.9.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/build/cjs/config/formats.js +58 -43
  2. package/build/cjs/config/formats.js.map +1 -1
  3. package/build/cjs/data/abilities.js +41 -41
  4. package/build/cjs/data/abilities.js.map +1 -1
  5. package/build/cjs/data/aliases.js +2 -2
  6. package/build/cjs/data/aliases.js.map +1 -1
  7. package/build/cjs/data/conditions.js +20 -20
  8. package/build/cjs/data/conditions.js.map +1 -1
  9. package/build/cjs/data/formats-data.js +1 -1
  10. package/build/cjs/data/items.js +5 -5
  11. package/build/cjs/data/items.js.map +1 -1
  12. package/build/cjs/data/mods/gen1/conditions.js +1 -2
  13. package/build/cjs/data/mods/gen1/conditions.js.map +1 -1
  14. package/build/cjs/data/mods/gen1/moves.js +2 -2
  15. package/build/cjs/data/mods/gen1/moves.js.map +1 -1
  16. package/build/cjs/data/mods/gen1/pokedex.js.map +1 -1
  17. package/build/cjs/data/mods/gen1/scripts.js +6 -6
  18. package/build/cjs/data/mods/gen1/scripts.js.map +1 -1
  19. package/build/cjs/data/mods/gen2/conditions.js +2 -2
  20. package/build/cjs/data/mods/gen2/conditions.js.map +1 -1
  21. package/build/cjs/data/mods/gen2/moves.js +3 -3
  22. package/build/cjs/data/mods/gen2/moves.js.map +1 -1
  23. package/build/cjs/data/mods/gen2/rulesets.js.map +1 -1
  24. package/build/cjs/data/mods/gen2/scripts.js +2 -2
  25. package/build/cjs/data/mods/gen2/scripts.js.map +1 -1
  26. package/build/cjs/data/mods/gen3/abilities.js +1 -1
  27. package/build/cjs/data/mods/gen3/abilities.js.map +1 -1
  28. package/build/cjs/data/mods/gen3/conditions.js +1 -1
  29. package/build/cjs/data/mods/gen3/conditions.js.map +1 -1
  30. package/build/cjs/data/mods/gen3/moves.js +5 -5
  31. package/build/cjs/data/mods/gen3/moves.js.map +1 -1
  32. package/build/cjs/data/mods/gen3/scripts.js +2 -2
  33. package/build/cjs/data/mods/gen3/scripts.js.map +1 -1
  34. package/build/cjs/data/mods/gen4/abilities.js +4 -4
  35. package/build/cjs/data/mods/gen4/abilities.js.map +1 -1
  36. package/build/cjs/data/mods/gen4/conditions.js +1 -1
  37. package/build/cjs/data/mods/gen4/conditions.js.map +1 -1
  38. package/build/cjs/data/mods/gen4/items.js +2 -2
  39. package/build/cjs/data/mods/gen4/items.js.map +1 -1
  40. package/build/cjs/data/mods/gen4/moves.js +22 -22
  41. package/build/cjs/data/mods/gen4/moves.js.map +1 -1
  42. package/build/cjs/data/mods/gen4/scripts.js +1 -1
  43. package/build/cjs/data/mods/gen4/scripts.js.map +1 -1
  44. package/build/cjs/data/mods/gen5/abilities.js +1 -1
  45. package/build/cjs/data/mods/gen5/abilities.js.map +1 -1
  46. package/build/cjs/data/mods/gen5/conditions.js +2 -2
  47. package/build/cjs/data/mods/gen5/conditions.js.map +1 -1
  48. package/build/cjs/data/mods/gen5/moves.js +6 -6
  49. package/build/cjs/data/mods/gen5/moves.js.map +1 -1
  50. package/build/cjs/data/mods/gen5/pokedex.js.map +1 -1
  51. package/build/cjs/data/mods/gen6/abilities.js +2 -2
  52. package/build/cjs/data/mods/gen6/abilities.js.map +1 -1
  53. package/build/cjs/data/mods/gen6/moves.js +1 -1
  54. package/build/cjs/data/mods/gen6/moves.js.map +1 -1
  55. package/build/cjs/data/mods/gen6/pokedex.js.map +1 -1
  56. package/build/cjs/data/mods/gen7/abilities.js.map +1 -1
  57. package/build/cjs/data/mods/gen7/moves.js +8 -8
  58. package/build/cjs/data/mods/gen7/moves.js.map +1 -1
  59. package/build/cjs/data/mods/gen7/pokedex.js.map +1 -1
  60. package/build/cjs/data/mods/gen8/abilities.js.map +1 -1
  61. package/build/cjs/data/mods/gen8/moves.js.map +1 -1
  62. package/build/cjs/data/mods/gen8/pokedex.js.map +1 -1
  63. package/build/cjs/data/moves.js +105 -103
  64. package/build/cjs/data/moves.js.map +1 -1
  65. package/build/cjs/data/pokedex.js.map +1 -1
  66. package/build/cjs/data/pokemongo.js.map +1 -1
  67. package/build/cjs/data/rulesets.js +0 -1
  68. package/build/cjs/data/rulesets.js.map +1 -1
  69. package/build/cjs/data/tags.js.map +1 -1
  70. package/build/cjs/data/text/abilities.js.map +1 -1
  71. package/build/cjs/data/text/default.js.map +1 -1
  72. package/build/cjs/data/text/items.js.map +1 -1
  73. package/build/cjs/data/text/moves.js.map +1 -1
  74. package/build/cjs/data/typechart.js.map +1 -1
  75. package/build/cjs/lib/utils.d.ts +5 -5
  76. package/build/cjs/lib/utils.js +21 -11
  77. package/build/cjs/lib/utils.js.map +1 -1
  78. package/build/cjs/sim/battle-actions.js +8 -8
  79. package/build/cjs/sim/battle-actions.js.map +1 -1
  80. package/build/cjs/sim/battle-queue.js +0 -1
  81. package/build/cjs/sim/battle-queue.js.map +1 -1
  82. package/build/cjs/sim/battle-stream.d.ts +3 -2
  83. package/build/cjs/sim/battle-stream.js +1 -1
  84. package/build/cjs/sim/battle-stream.js.map +1 -1
  85. package/build/cjs/sim/battle.d.ts +8 -8
  86. package/build/cjs/sim/battle.js +41 -44
  87. package/build/cjs/sim/battle.js.map +1 -1
  88. package/build/cjs/sim/dex-abilities.js.map +1 -1
  89. package/build/cjs/sim/dex-conditions.js +2 -2
  90. package/build/cjs/sim/dex-conditions.js.map +1 -1
  91. package/build/cjs/sim/dex-data.js +1 -1
  92. package/build/cjs/sim/dex-data.js.map +1 -1
  93. package/build/cjs/sim/dex-formats.d.ts +1 -0
  94. package/build/cjs/sim/dex-formats.js +95 -37
  95. package/build/cjs/sim/dex-formats.js.map +1 -1
  96. package/build/cjs/sim/dex-items.js.map +1 -1
  97. package/build/cjs/sim/dex-moves.js +2 -3
  98. package/build/cjs/sim/dex-moves.js.map +1 -1
  99. package/build/cjs/sim/exported-global-types.d.ts +1 -9
  100. package/build/cjs/sim/field.d.ts +1 -1
  101. package/build/cjs/sim/field.js +3 -3
  102. package/build/cjs/sim/field.js.map +1 -1
  103. package/build/cjs/sim/global-types.d.ts +1 -9
  104. package/build/cjs/sim/pokemon.d.ts +14 -25
  105. package/build/cjs/sim/pokemon.js +21 -22
  106. package/build/cjs/sim/pokemon.js.map +1 -1
  107. package/build/cjs/sim/side.d.ts +105 -11
  108. package/build/cjs/sim/side.js +6 -6
  109. package/build/cjs/sim/side.js.map +1 -1
  110. package/build/cjs/sim/state.d.ts +1 -1
  111. package/build/cjs/sim/state.js +3 -3
  112. package/build/cjs/sim/state.js.map +1 -1
  113. package/build/cjs/sim/team-validator.d.ts +2 -1
  114. package/build/cjs/sim/team-validator.js +37 -27
  115. package/build/cjs/sim/team-validator.js.map +1 -1
  116. package/build/cjs/sim/tools/random-player-ai.d.ts +4 -3
  117. package/build/cjs/sim/tools/random-player-ai.js +6 -7
  118. package/build/cjs/sim/tools/random-player-ai.js.map +1 -1
  119. package/build/cjs/sim/tools/runner.d.ts +2 -2
  120. package/build/cjs/sim/tools/runner.js +1 -1
  121. package/build/cjs/sim/tools/runner.js.map +1 -1
  122. package/build/esm/config/formats.mjs +58 -43
  123. package/build/esm/config/formats.mjs.map +1 -1
  124. package/build/esm/data/abilities.mjs +41 -41
  125. package/build/esm/data/abilities.mjs.map +1 -1
  126. package/build/esm/data/aliases.mjs +2 -2
  127. package/build/esm/data/aliases.mjs.map +1 -1
  128. package/build/esm/data/conditions.mjs +20 -20
  129. package/build/esm/data/conditions.mjs.map +1 -1
  130. package/build/esm/data/formats-data.mjs +1 -1
  131. package/build/esm/data/items.mjs +5 -5
  132. package/build/esm/data/items.mjs.map +1 -1
  133. package/build/esm/data/mods/gen1/conditions.mjs +1 -2
  134. package/build/esm/data/mods/gen1/conditions.mjs.map +1 -1
  135. package/build/esm/data/mods/gen1/moves.mjs +2 -2
  136. package/build/esm/data/mods/gen1/moves.mjs.map +1 -1
  137. package/build/esm/data/mods/gen1/pokedex.mjs.map +1 -1
  138. package/build/esm/data/mods/gen1/scripts.mjs +6 -6
  139. package/build/esm/data/mods/gen1/scripts.mjs.map +1 -1
  140. package/build/esm/data/mods/gen2/conditions.mjs +2 -2
  141. package/build/esm/data/mods/gen2/conditions.mjs.map +1 -1
  142. package/build/esm/data/mods/gen2/moves.mjs +3 -3
  143. package/build/esm/data/mods/gen2/moves.mjs.map +1 -1
  144. package/build/esm/data/mods/gen2/rulesets.mjs.map +1 -1
  145. package/build/esm/data/mods/gen2/scripts.mjs +2 -2
  146. package/build/esm/data/mods/gen2/scripts.mjs.map +1 -1
  147. package/build/esm/data/mods/gen3/abilities.mjs +1 -1
  148. package/build/esm/data/mods/gen3/abilities.mjs.map +1 -1
  149. package/build/esm/data/mods/gen3/conditions.mjs +1 -1
  150. package/build/esm/data/mods/gen3/conditions.mjs.map +1 -1
  151. package/build/esm/data/mods/gen3/moves.mjs +5 -5
  152. package/build/esm/data/mods/gen3/moves.mjs.map +1 -1
  153. package/build/esm/data/mods/gen3/scripts.mjs +2 -2
  154. package/build/esm/data/mods/gen3/scripts.mjs.map +1 -1
  155. package/build/esm/data/mods/gen4/abilities.mjs +4 -4
  156. package/build/esm/data/mods/gen4/abilities.mjs.map +1 -1
  157. package/build/esm/data/mods/gen4/conditions.mjs +1 -1
  158. package/build/esm/data/mods/gen4/conditions.mjs.map +1 -1
  159. package/build/esm/data/mods/gen4/items.mjs +2 -2
  160. package/build/esm/data/mods/gen4/items.mjs.map +1 -1
  161. package/build/esm/data/mods/gen4/moves.mjs +22 -22
  162. package/build/esm/data/mods/gen4/moves.mjs.map +1 -1
  163. package/build/esm/data/mods/gen4/scripts.mjs +1 -1
  164. package/build/esm/data/mods/gen4/scripts.mjs.map +1 -1
  165. package/build/esm/data/mods/gen5/abilities.mjs +1 -1
  166. package/build/esm/data/mods/gen5/abilities.mjs.map +1 -1
  167. package/build/esm/data/mods/gen5/conditions.mjs +2 -2
  168. package/build/esm/data/mods/gen5/conditions.mjs.map +1 -1
  169. package/build/esm/data/mods/gen5/moves.mjs +6 -6
  170. package/build/esm/data/mods/gen5/moves.mjs.map +1 -1
  171. package/build/esm/data/mods/gen5/pokedex.mjs.map +1 -1
  172. package/build/esm/data/mods/gen6/abilities.mjs +2 -2
  173. package/build/esm/data/mods/gen6/abilities.mjs.map +1 -1
  174. package/build/esm/data/mods/gen6/moves.mjs +1 -1
  175. package/build/esm/data/mods/gen6/moves.mjs.map +1 -1
  176. package/build/esm/data/mods/gen6/pokedex.mjs.map +1 -1
  177. package/build/esm/data/mods/gen7/abilities.mjs.map +1 -1
  178. package/build/esm/data/mods/gen7/moves.mjs +8 -8
  179. package/build/esm/data/mods/gen7/moves.mjs.map +1 -1
  180. package/build/esm/data/mods/gen7/pokedex.mjs.map +1 -1
  181. package/build/esm/data/mods/gen8/abilities.mjs.map +1 -1
  182. package/build/esm/data/mods/gen8/moves.mjs.map +1 -1
  183. package/build/esm/data/mods/gen8/pokedex.mjs.map +1 -1
  184. package/build/esm/data/moves.mjs +105 -103
  185. package/build/esm/data/moves.mjs.map +1 -1
  186. package/build/esm/data/pokedex.mjs.map +1 -1
  187. package/build/esm/data/pokemongo.mjs.map +1 -1
  188. package/build/esm/data/rulesets.mjs +0 -1
  189. package/build/esm/data/rulesets.mjs.map +1 -1
  190. package/build/esm/data/tags.mjs.map +1 -1
  191. package/build/esm/data/text/abilities.mjs.map +1 -1
  192. package/build/esm/data/text/default.mjs.map +1 -1
  193. package/build/esm/data/text/items.mjs.map +1 -1
  194. package/build/esm/data/text/moves.mjs.map +1 -1
  195. package/build/esm/data/typechart.mjs.map +1 -1
  196. package/build/esm/lib/utils.d.mts +5 -5
  197. package/build/esm/lib/utils.mjs +21 -11
  198. package/build/esm/lib/utils.mjs.map +1 -1
  199. package/build/esm/sim/battle-actions.mjs +8 -8
  200. package/build/esm/sim/battle-actions.mjs.map +1 -1
  201. package/build/esm/sim/battle-queue.mjs +0 -1
  202. package/build/esm/sim/battle-queue.mjs.map +1 -1
  203. package/build/esm/sim/battle-stream.d.mts +3 -2
  204. package/build/esm/sim/battle-stream.mjs +1 -1
  205. package/build/esm/sim/battle-stream.mjs.map +1 -1
  206. package/build/esm/sim/battle.d.mts +8 -8
  207. package/build/esm/sim/battle.mjs +41 -44
  208. package/build/esm/sim/battle.mjs.map +1 -1
  209. package/build/esm/sim/dex-abilities.mjs.map +1 -1
  210. package/build/esm/sim/dex-conditions.mjs +2 -2
  211. package/build/esm/sim/dex-conditions.mjs.map +1 -1
  212. package/build/esm/sim/dex-data.mjs +1 -1
  213. package/build/esm/sim/dex-data.mjs.map +1 -1
  214. package/build/esm/sim/dex-formats.d.mts +1 -0
  215. package/build/esm/sim/dex-formats.mjs +95 -37
  216. package/build/esm/sim/dex-formats.mjs.map +1 -1
  217. package/build/esm/sim/dex-items.mjs.map +1 -1
  218. package/build/esm/sim/dex-moves.mjs +2 -3
  219. package/build/esm/sim/dex-moves.mjs.map +1 -1
  220. package/build/esm/sim/exported-global-types.d.mts +1 -9
  221. package/build/esm/sim/field.d.mts +1 -1
  222. package/build/esm/sim/field.mjs +3 -3
  223. package/build/esm/sim/field.mjs.map +1 -1
  224. package/build/esm/sim/global-types.d.mts +1 -9
  225. package/build/esm/sim/pokemon.d.mts +14 -25
  226. package/build/esm/sim/pokemon.mjs +21 -22
  227. package/build/esm/sim/pokemon.mjs.map +1 -1
  228. package/build/esm/sim/side.d.mts +105 -11
  229. package/build/esm/sim/side.mjs +6 -6
  230. package/build/esm/sim/side.mjs.map +1 -1
  231. package/build/esm/sim/state.d.mts +1 -1
  232. package/build/esm/sim/state.mjs +3 -3
  233. package/build/esm/sim/state.mjs.map +1 -1
  234. package/build/esm/sim/team-validator.d.mts +2 -1
  235. package/build/esm/sim/team-validator.mjs +37 -27
  236. package/build/esm/sim/team-validator.mjs.map +1 -1
  237. package/build/esm/sim/tools/random-player-ai.d.mts +4 -3
  238. package/build/esm/sim/tools/random-player-ai.mjs +6 -7
  239. package/build/esm/sim/tools/random-player-ai.mjs.map +1 -1
  240. package/build/esm/sim/tools/runner.d.mts +2 -2
  241. package/build/esm/sim/tools/runner.mjs +1 -1
  242. package/build/esm/sim/tools/runner.mjs.map +1 -1
  243. package/package.json +1 -1
@@ -231,7 +231,7 @@ export const Abilities = {
231
231
  const armorTailHolder = this.effectState.target;
232
232
  if ((source.isAlly(armorTailHolder) || move.target === 'all') && move.priority > 0.1) {
233
233
  this.attrLastMove('[still]');
234
- this.add('cant', armorTailHolder, 'ability: Armor Tail', move, '[of] ' + target);
234
+ this.add('cant', armorTailHolder, 'ability: Armor Tail', move, `[of] ${target}`);
235
235
  return false;
236
236
  }
237
237
  },
@@ -245,7 +245,7 @@ export const Abilities = {
245
245
  if (['attract', 'disable', 'encore', 'healblock', 'taunt', 'torment'].includes(status.id)) {
246
246
  if (effect.effectType === 'Move') {
247
247
  const effectHolder = this.effectState.target;
248
- this.add('-block', target, 'ability: Aroma Veil', '[of] ' + effectHolder);
248
+ this.add('-block', target, 'ability: Aroma Veil', `[of] ${effectHolder}`);
249
249
  }
250
250
  return null;
251
251
  }
@@ -459,7 +459,7 @@ export const Abilities = {
459
459
  if (boost.def && boost.def < 0) {
460
460
  delete boost.def;
461
461
  if (!effect.secondaries && effect.id !== 'octolock') {
462
- this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", "[of] " + target);
462
+ this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", `[of] ${target}`);
463
463
  }
464
464
  }
465
465
  },
@@ -544,7 +544,7 @@ export const Abilities = {
544
544
  }
545
545
  }
546
546
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
547
- this.add("-fail", target, "unboost", "[from] ability: Clear Body", "[of] " + target);
547
+ this.add("-fail", target, "unboost", "[from] ability: Clear Body", `[of] ${target}`);
548
548
  }
549
549
  },
550
550
  flags: { breakable: 1 },
@@ -642,7 +642,7 @@ export const Abilities = {
642
642
  // Cancel all actions this turn for pokemon if applicable
643
643
  this.queue.cancelAction(pokemon);
644
644
  // Add volatiles to both pokemon
645
- this.add('-activate', pokemon, 'ability: Commander', '[of] ' + ally);
645
+ this.add('-activate', pokemon, 'ability: Commander', `[of] ${ally}`);
646
646
  pokemon.addVolatile('commanding');
647
647
  ally.addVolatile('commanded', pokemon);
648
648
  // Continued in conditions.ts in the volatiles
@@ -800,7 +800,7 @@ export const Abilities = {
800
800
  onStart(pokemon) {
801
801
  for (const ally of pokemon.adjacentAllies()) {
802
802
  ally.clearBoosts();
803
- this.add('-clearboost', ally, '[from] ability: Curious Medicine', '[of] ' + pokemon);
803
+ this.add('-clearboost', ally, '[from] ability: Curious Medicine', `[of] ${pokemon}`);
804
804
  }
805
805
  },
806
806
  flags: {},
@@ -840,7 +840,7 @@ export const Abilities = {
840
840
  onAnyTryMove(target, source, effect) {
841
841
  if (['explosion', 'mindblown', 'mistyexplosion', 'selfdestruct'].includes(effect.id)) {
842
842
  this.attrLastMove('[still]');
843
- this.add('cant', this.effectState.target, 'ability: Damp', effect, '[of] ' + target);
843
+ this.add('cant', this.effectState.target, 'ability: Damp', effect, `[of] ${target}`);
844
844
  return false;
845
845
  }
846
846
  },
@@ -903,7 +903,7 @@ export const Abilities = {
903
903
  const dazzlingHolder = this.effectState.target;
904
904
  if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
905
905
  this.attrLastMove('[still]');
906
- this.add('cant', dazzlingHolder, 'ability: Dazzling', move, '[of] ' + target);
906
+ this.add('cant', dazzlingHolder, 'ability: Dazzling', move, `[of] ${target}`);
907
907
  return false;
908
908
  }
909
909
  },
@@ -1431,7 +1431,7 @@ export const Abilities = {
1431
1431
  }
1432
1432
  if (showMsg && !effect.secondaries) {
1433
1433
  const effectHolder = this.effectState.target;
1434
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1434
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1435
1435
  }
1436
1436
  },
1437
1437
  onAllySetStatus(status, target, source, effect) {
@@ -1439,7 +1439,7 @@ export const Abilities = {
1439
1439
  this.debug('interrupting setStatus with Flower Veil');
1440
1440
  if (effect.name === 'Synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {
1441
1441
  const effectHolder = this.effectState.target;
1442
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1442
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1443
1443
  }
1444
1444
  return null;
1445
1445
  }
@@ -1448,7 +1448,7 @@ export const Abilities = {
1448
1448
  if (target.hasType('Grass') && status.id === 'yawn') {
1449
1449
  this.debug('Flower Veil blocking yawn');
1450
1450
  const effectHolder = this.effectState.target;
1451
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1451
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1452
1452
  return null;
1453
1453
  }
1454
1454
  },
@@ -1538,7 +1538,7 @@ export const Abilities = {
1538
1538
  if (!warnMoves.length)
1539
1539
  return;
1540
1540
  const [warnMoveName, warnTarget] = this.sample(warnMoves);
1541
- this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget);
1541
+ this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, `[of] ${warnTarget}`);
1542
1542
  },
1543
1543
  flags: {},
1544
1544
  name: "Forewarn",
@@ -1561,7 +1561,7 @@ export const Abilities = {
1561
1561
  onStart(pokemon) {
1562
1562
  for (const target of pokemon.foes()) {
1563
1563
  if (target.item) {
1564
- this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon);
1564
+ this.add('-item', target, target.getItem().name, '[from] ability: Frisk', `[of] ${pokemon}`);
1565
1565
  }
1566
1566
  }
1567
1567
  },
@@ -1583,7 +1583,7 @@ export const Abilities = {
1583
1583
  }
1584
1584
  }
1585
1585
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
1586
- this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", "[of] " + target);
1586
+ this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", `[of] ${target}`);
1587
1587
  }
1588
1588
  },
1589
1589
  flags: {},
@@ -1971,7 +1971,7 @@ export const Abilities = {
1971
1971
  if (boost.atk && boost.atk < 0) {
1972
1972
  delete boost.atk;
1973
1973
  if (!effect.secondaries) {
1974
- this.add("-fail", target, "unboost", "Attack", "[from] ability: Hyper Cutter", "[of] " + target);
1974
+ this.add("-fail", target, "unboost", "Attack", "[from] ability: Hyper Cutter", `[of] ${target}`);
1975
1975
  }
1976
1976
  }
1977
1977
  },
@@ -2078,7 +2078,7 @@ export const Abilities = {
2078
2078
  if (boost.accuracy && boost.accuracy < 0) {
2079
2079
  delete boost.accuracy;
2080
2080
  if (!effect.secondaries) {
2081
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Illuminate", "[of] " + target);
2081
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Illuminate", `[of] ${target}`);
2082
2082
  }
2083
2083
  }
2084
2084
  },
@@ -2196,7 +2196,7 @@ export const Abilities = {
2196
2196
  onTryBoost(boost, target, source, effect) {
2197
2197
  if (effect.name === 'Intimidate' && boost.atk) {
2198
2198
  delete boost.atk;
2199
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', '[of] ' + target);
2199
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', `[of] ${target}`);
2200
2200
  }
2201
2201
  },
2202
2202
  flags: { breakable: 1 },
@@ -2306,7 +2306,7 @@ export const Abilities = {
2306
2306
  if (boost.accuracy && boost.accuracy < 0) {
2307
2307
  delete boost.accuracy;
2308
2308
  if (!effect.secondaries) {
2309
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Keen Eye", "[of] " + target);
2309
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Keen Eye", `[of] ${target}`);
2310
2310
  }
2311
2311
  }
2312
2312
  },
@@ -2442,7 +2442,7 @@ export const Abilities = {
2442
2442
  if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
2443
2443
  const oldAbility = source.setAbility('lingeringaroma', target);
2444
2444
  if (oldAbility) {
2445
- this.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, '[of] ' + source);
2445
+ this.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
2446
2446
  }
2447
2447
  }
2448
2448
  },
@@ -2453,7 +2453,7 @@ export const Abilities = {
2453
2453
  },
2454
2454
  liquidooze: {
2455
2455
  onSourceTryHeal(damage, target, source, effect) {
2456
- this.debug("Heal is occurring: " + target + " <- " + source + " :: " + effect.id);
2456
+ this.debug(`Heal is occurring: ${target} <- ${source} :: ${effect.id}`);
2457
2457
  const canOoze = ['drain', 'leechseed', 'strengthsap'];
2458
2458
  if (canOoze.includes(effect.id)) {
2459
2459
  this.damage(damage);
@@ -2543,7 +2543,7 @@ export const Abilities = {
2543
2543
  target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything
2544
2544
  return;
2545
2545
  }
2546
- this.add('-item', source, yourItem, '[from] ability: Magician', '[of] ' + target);
2546
+ this.add('-item', source, yourItem, '[from] ability: Magician', `[of] ${target}`);
2547
2547
  }
2548
2548
  },
2549
2549
  flags: {},
@@ -2669,7 +2669,7 @@ export const Abilities = {
2669
2669
  if (boost.accuracy && boost.accuracy < 0) {
2670
2670
  delete boost.accuracy;
2671
2671
  if (!effect.secondaries) {
2672
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Mind's Eye", "[of] " + target);
2672
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Mind's Eye", `[of] ${target}`);
2673
2673
  }
2674
2674
  }
2675
2675
  },
@@ -2837,7 +2837,7 @@ export const Abilities = {
2837
2837
  if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
2838
2838
  const oldAbility = source.setAbility('mummy', target);
2839
2839
  if (oldAbility) {
2840
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, '[of] ' + source);
2840
+ this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
2841
2841
  }
2842
2842
  }
2843
2843
  },
@@ -2920,7 +2920,7 @@ export const Abilities = {
2920
2920
  else {
2921
2921
  // It's not possible to know what pokemon were cured
2922
2922
  // Unlike a -hint, this is real information that battlers need, so we use a -message
2923
- this.add('-message', "(" + cureList.length + " of " + pokemon.side.name + "'s pokemon " + (cureList.length === 1 ? "was" : "were") + " cured by Natural Cure.)");
2923
+ this.add('-message', `(${cureList.length} of ${pokemon.side.name}'s pokemon ${cureList.length === 1 ? "was" : "were"} cured by Natural Cure.)`);
2924
2924
  for (const pkmn of cureList) {
2925
2925
  pkmn.showCure = false;
2926
2926
  }
@@ -3089,7 +3089,7 @@ export const Abilities = {
3089
3089
  onTryBoost(boost, target, source, effect) {
3090
3090
  if (effect.name === 'Intimidate' && boost.atk) {
3091
3091
  delete boost.atk;
3092
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target);
3092
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', `[of] ${target}`);
3093
3093
  }
3094
3094
  },
3095
3095
  flags: { breakable: 1 },
@@ -3216,7 +3216,7 @@ export const Abilities = {
3216
3216
  onTryBoost(boost, target, source, effect) {
3217
3217
  if (effect.name === 'Intimidate' && boost.atk) {
3218
3218
  delete boost.atk;
3219
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', '[of] ' + target);
3219
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', `[of] ${target}`);
3220
3220
  }
3221
3221
  },
3222
3222
  flags: { breakable: 1 },
@@ -3275,7 +3275,7 @@ export const Abilities = {
3275
3275
  return;
3276
3276
  if (effect?.status) {
3277
3277
  const effectHolder = this.effectState.target;
3278
- this.add('-block', target, 'ability: Pastel Veil', '[of] ' + effectHolder);
3278
+ this.add('-block', target, 'ability: Pastel Veil', `[of] ${effectHolder}`);
3279
3279
  }
3280
3280
  return false;
3281
3281
  },
@@ -3311,8 +3311,8 @@ export const Abilities = {
3311
3311
  source.item = yourItem.id;
3312
3312
  return;
3313
3313
  }
3314
- this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', '[of] ' + source);
3315
- this.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source);
3314
+ this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', `[of] ${source}`);
3315
+ this.add('-item', target, yourItem, '[from] ability: Pickpocket', `[of] ${source}`);
3316
3316
  }
3317
3317
  },
3318
3318
  flags: {},
@@ -3461,7 +3461,7 @@ export const Abilities = {
3461
3461
  if (ability.flags['noreceiver'] || ability.id === 'noability')
3462
3462
  return;
3463
3463
  if (this.effectState.target.setAbility(ability)) {
3464
- this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target);
3464
+ this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', `[of] ${target}`);
3465
3465
  }
3466
3466
  },
3467
3467
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -3803,7 +3803,7 @@ export const Abilities = {
3803
3803
  const dazzlingHolder = this.effectState.target;
3804
3804
  if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
3805
3805
  this.attrLastMove('[still]');
3806
- this.add('cant', dazzlingHolder, 'ability: Queenly Majesty', move, '[of] ' + target);
3806
+ this.add('cant', dazzlingHolder, 'ability: Queenly Majesty', move, `[of] ${target}`);
3807
3807
  return false;
3808
3808
  }
3809
3809
  },
@@ -3873,7 +3873,7 @@ export const Abilities = {
3873
3873
  if (ability.flags['noreceiver'] || ability.id === 'noability')
3874
3874
  return;
3875
3875
  if (this.effectState.target.setAbility(ability)) {
3876
- this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', '[of] ' + target);
3876
+ this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', `[of] ${target}`);
3877
3877
  }
3878
3878
  },
3879
3879
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -4187,7 +4187,7 @@ export const Abilities = {
4187
4187
  onTryBoost(boost, target, source, effect) {
4188
4188
  if (effect.name === 'Intimidate' && boost.atk) {
4189
4189
  delete boost.atk;
4190
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', '[of] ' + target);
4190
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', `[of] ${target}`);
4191
4191
  }
4192
4192
  },
4193
4193
  flags: {},
@@ -4905,7 +4905,7 @@ export const Abilities = {
4905
4905
  if (status.id === 'slp') {
4906
4906
  this.debug('Sweet Veil interrupts sleep');
4907
4907
  const effectHolder = this.effectState.target;
4908
- this.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);
4908
+ this.add('-block', target, 'ability: Sweet Veil', `[of] ${effectHolder}`);
4909
4909
  return null;
4910
4910
  }
4911
4911
  },
@@ -4913,7 +4913,7 @@ export const Abilities = {
4913
4913
  if (status.id === 'yawn') {
4914
4914
  this.debug('Sweet Veil blocking yawn');
4915
4915
  const effectHolder = this.effectState.target;
4916
- this.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);
4916
+ this.add('-block', target, 'ability: Sweet Veil', `[of] ${effectHolder}`);
4917
4917
  return null;
4918
4918
  }
4919
4919
  },
@@ -4946,7 +4946,7 @@ export const Abilities = {
4946
4946
  source.item = myItem.id;
4947
4947
  return;
4948
4948
  }
4949
- this.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon);
4949
+ this.add('-activate', source, 'ability: Symbiosis', myItem, `[of] ${pokemon}`);
4950
4950
  },
4951
4951
  flags: {},
4952
4952
  name: "Symbiosis",
@@ -5046,7 +5046,7 @@ export const Abilities = {
5046
5046
  onBasePowerPriority: 30,
5047
5047
  onBasePower(basePower, attacker, defender, move) {
5048
5048
  const basePowerAfterMultiplier = this.modify(basePower, this.event.modifier);
5049
- this.debug('Base Power: ' + basePowerAfterMultiplier);
5049
+ this.debug(`Base Power: ${basePowerAfterMultiplier}`);
5050
5050
  if (basePowerAfterMultiplier <= 60) {
5051
5051
  this.debug('Technician boost');
5052
5052
  return this.chainModify(1.5);
@@ -5286,7 +5286,7 @@ export const Abilities = {
5286
5286
  const target = this.sample(possibleTargets);
5287
5287
  const ability = target.getAbility();
5288
5288
  if (pokemon.setAbility(ability)) {
5289
- this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
5289
+ this.add('-ability', pokemon, ability, '[from] ability: Trace', `[of] ${target}`);
5290
5290
  }
5291
5291
  },
5292
5292
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -5518,10 +5518,10 @@ export const Abilities = {
5518
5518
  if (!sourceAbility)
5519
5519
  return;
5520
5520
  if (target.isAlly(source)) {
5521
- this.add('-activate', target, 'Skill Swap', '', '', '[of] ' + source);
5521
+ this.add('-activate', target, 'Skill Swap', '', '', `[of] ${source}`);
5522
5522
  }
5523
5523
  else {
5524
- this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', '[of] ' + source);
5524
+ this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', `[of] ${source}`);
5525
5525
  }
5526
5526
  target.setAbility(sourceAbility);
5527
5527
  }
@@ -5656,7 +5656,7 @@ export const Abilities = {
5656
5656
  }
5657
5657
  }
5658
5658
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
5659
- this.add("-fail", target, "unboost", "[from] ability: White Smoke", "[of] " + target);
5659
+ this.add("-fail", target, "unboost", "[from] ability: White Smoke", `[of] ${target}`);
5660
5660
  }
5661
5661
  },
5662
5662
  flags: { breakable: 1 },