@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
@@ -234,7 +234,7 @@ exports.Abilities = {
234
234
  const armorTailHolder = this.effectState.target;
235
235
  if ((source.isAlly(armorTailHolder) || move.target === 'all') && move.priority > 0.1) {
236
236
  this.attrLastMove('[still]');
237
- this.add('cant', armorTailHolder, 'ability: Armor Tail', move, '[of] ' + target);
237
+ this.add('cant', armorTailHolder, 'ability: Armor Tail', move, `[of] ${target}`);
238
238
  return false;
239
239
  }
240
240
  },
@@ -248,7 +248,7 @@ exports.Abilities = {
248
248
  if (['attract', 'disable', 'encore', 'healblock', 'taunt', 'torment'].includes(status.id)) {
249
249
  if (effect.effectType === 'Move') {
250
250
  const effectHolder = this.effectState.target;
251
- this.add('-block', target, 'ability: Aroma Veil', '[of] ' + effectHolder);
251
+ this.add('-block', target, 'ability: Aroma Veil', `[of] ${effectHolder}`);
252
252
  }
253
253
  return null;
254
254
  }
@@ -462,7 +462,7 @@ exports.Abilities = {
462
462
  if (boost.def && boost.def < 0) {
463
463
  delete boost.def;
464
464
  if (!effect.secondaries && effect.id !== 'octolock') {
465
- this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", "[of] " + target);
465
+ this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", `[of] ${target}`);
466
466
  }
467
467
  }
468
468
  },
@@ -547,7 +547,7 @@ exports.Abilities = {
547
547
  }
548
548
  }
549
549
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
550
- this.add("-fail", target, "unboost", "[from] ability: Clear Body", "[of] " + target);
550
+ this.add("-fail", target, "unboost", "[from] ability: Clear Body", `[of] ${target}`);
551
551
  }
552
552
  },
553
553
  flags: { breakable: 1 },
@@ -645,7 +645,7 @@ exports.Abilities = {
645
645
  // Cancel all actions this turn for pokemon if applicable
646
646
  this.queue.cancelAction(pokemon);
647
647
  // Add volatiles to both pokemon
648
- this.add('-activate', pokemon, 'ability: Commander', '[of] ' + ally);
648
+ this.add('-activate', pokemon, 'ability: Commander', `[of] ${ally}`);
649
649
  pokemon.addVolatile('commanding');
650
650
  ally.addVolatile('commanded', pokemon);
651
651
  // Continued in conditions.ts in the volatiles
@@ -803,7 +803,7 @@ exports.Abilities = {
803
803
  onStart(pokemon) {
804
804
  for (const ally of pokemon.adjacentAllies()) {
805
805
  ally.clearBoosts();
806
- this.add('-clearboost', ally, '[from] ability: Curious Medicine', '[of] ' + pokemon);
806
+ this.add('-clearboost', ally, '[from] ability: Curious Medicine', `[of] ${pokemon}`);
807
807
  }
808
808
  },
809
809
  flags: {},
@@ -843,7 +843,7 @@ exports.Abilities = {
843
843
  onAnyTryMove(target, source, effect) {
844
844
  if (['explosion', 'mindblown', 'mistyexplosion', 'selfdestruct'].includes(effect.id)) {
845
845
  this.attrLastMove('[still]');
846
- this.add('cant', this.effectState.target, 'ability: Damp', effect, '[of] ' + target);
846
+ this.add('cant', this.effectState.target, 'ability: Damp', effect, `[of] ${target}`);
847
847
  return false;
848
848
  }
849
849
  },
@@ -906,7 +906,7 @@ exports.Abilities = {
906
906
  const dazzlingHolder = this.effectState.target;
907
907
  if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
908
908
  this.attrLastMove('[still]');
909
- this.add('cant', dazzlingHolder, 'ability: Dazzling', move, '[of] ' + target);
909
+ this.add('cant', dazzlingHolder, 'ability: Dazzling', move, `[of] ${target}`);
910
910
  return false;
911
911
  }
912
912
  },
@@ -1434,7 +1434,7 @@ exports.Abilities = {
1434
1434
  }
1435
1435
  if (showMsg && !effect.secondaries) {
1436
1436
  const effectHolder = this.effectState.target;
1437
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1437
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1438
1438
  }
1439
1439
  },
1440
1440
  onAllySetStatus(status, target, source, effect) {
@@ -1442,7 +1442,7 @@ exports.Abilities = {
1442
1442
  this.debug('interrupting setStatus with Flower Veil');
1443
1443
  if (effect.name === 'Synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {
1444
1444
  const effectHolder = this.effectState.target;
1445
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1445
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1446
1446
  }
1447
1447
  return null;
1448
1448
  }
@@ -1451,7 +1451,7 @@ exports.Abilities = {
1451
1451
  if (target.hasType('Grass') && status.id === 'yawn') {
1452
1452
  this.debug('Flower Veil blocking yawn');
1453
1453
  const effectHolder = this.effectState.target;
1454
- this.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);
1454
+ this.add('-block', target, 'ability: Flower Veil', `[of] ${effectHolder}`);
1455
1455
  return null;
1456
1456
  }
1457
1457
  },
@@ -1541,7 +1541,7 @@ exports.Abilities = {
1541
1541
  if (!warnMoves.length)
1542
1542
  return;
1543
1543
  const [warnMoveName, warnTarget] = this.sample(warnMoves);
1544
- this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget);
1544
+ this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, `[of] ${warnTarget}`);
1545
1545
  },
1546
1546
  flags: {},
1547
1547
  name: "Forewarn",
@@ -1564,7 +1564,7 @@ exports.Abilities = {
1564
1564
  onStart(pokemon) {
1565
1565
  for (const target of pokemon.foes()) {
1566
1566
  if (target.item) {
1567
- this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon);
1567
+ this.add('-item', target, target.getItem().name, '[from] ability: Frisk', `[of] ${pokemon}`);
1568
1568
  }
1569
1569
  }
1570
1570
  },
@@ -1586,7 +1586,7 @@ exports.Abilities = {
1586
1586
  }
1587
1587
  }
1588
1588
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
1589
- this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", "[of] " + target);
1589
+ this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", `[of] ${target}`);
1590
1590
  }
1591
1591
  },
1592
1592
  flags: {},
@@ -1974,7 +1974,7 @@ exports.Abilities = {
1974
1974
  if (boost.atk && boost.atk < 0) {
1975
1975
  delete boost.atk;
1976
1976
  if (!effect.secondaries) {
1977
- this.add("-fail", target, "unboost", "Attack", "[from] ability: Hyper Cutter", "[of] " + target);
1977
+ this.add("-fail", target, "unboost", "Attack", "[from] ability: Hyper Cutter", `[of] ${target}`);
1978
1978
  }
1979
1979
  }
1980
1980
  },
@@ -2081,7 +2081,7 @@ exports.Abilities = {
2081
2081
  if (boost.accuracy && boost.accuracy < 0) {
2082
2082
  delete boost.accuracy;
2083
2083
  if (!effect.secondaries) {
2084
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Illuminate", "[of] " + target);
2084
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Illuminate", `[of] ${target}`);
2085
2085
  }
2086
2086
  }
2087
2087
  },
@@ -2199,7 +2199,7 @@ exports.Abilities = {
2199
2199
  onTryBoost(boost, target, source, effect) {
2200
2200
  if (effect.name === 'Intimidate' && boost.atk) {
2201
2201
  delete boost.atk;
2202
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', '[of] ' + target);
2202
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', `[of] ${target}`);
2203
2203
  }
2204
2204
  },
2205
2205
  flags: { breakable: 1 },
@@ -2309,7 +2309,7 @@ exports.Abilities = {
2309
2309
  if (boost.accuracy && boost.accuracy < 0) {
2310
2310
  delete boost.accuracy;
2311
2311
  if (!effect.secondaries) {
2312
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Keen Eye", "[of] " + target);
2312
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Keen Eye", `[of] ${target}`);
2313
2313
  }
2314
2314
  }
2315
2315
  },
@@ -2445,7 +2445,7 @@ exports.Abilities = {
2445
2445
  if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
2446
2446
  const oldAbility = source.setAbility('lingeringaroma', target);
2447
2447
  if (oldAbility) {
2448
- this.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, '[of] ' + source);
2448
+ this.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
2449
2449
  }
2450
2450
  }
2451
2451
  },
@@ -2456,7 +2456,7 @@ exports.Abilities = {
2456
2456
  },
2457
2457
  liquidooze: {
2458
2458
  onSourceTryHeal(damage, target, source, effect) {
2459
- this.debug("Heal is occurring: " + target + " <- " + source + " :: " + effect.id);
2459
+ this.debug(`Heal is occurring: ${target} <- ${source} :: ${effect.id}`);
2460
2460
  const canOoze = ['drain', 'leechseed', 'strengthsap'];
2461
2461
  if (canOoze.includes(effect.id)) {
2462
2462
  this.damage(damage);
@@ -2546,7 +2546,7 @@ exports.Abilities = {
2546
2546
  target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything
2547
2547
  return;
2548
2548
  }
2549
- this.add('-item', source, yourItem, '[from] ability: Magician', '[of] ' + target);
2549
+ this.add('-item', source, yourItem, '[from] ability: Magician', `[of] ${target}`);
2550
2550
  }
2551
2551
  },
2552
2552
  flags: {},
@@ -2672,7 +2672,7 @@ exports.Abilities = {
2672
2672
  if (boost.accuracy && boost.accuracy < 0) {
2673
2673
  delete boost.accuracy;
2674
2674
  if (!effect.secondaries) {
2675
- this.add("-fail", target, "unboost", "accuracy", "[from] ability: Mind's Eye", "[of] " + target);
2675
+ this.add("-fail", target, "unboost", "accuracy", "[from] ability: Mind's Eye", `[of] ${target}`);
2676
2676
  }
2677
2677
  }
2678
2678
  },
@@ -2840,7 +2840,7 @@ exports.Abilities = {
2840
2840
  if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
2841
2841
  const oldAbility = source.setAbility('mummy', target);
2842
2842
  if (oldAbility) {
2843
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, '[of] ' + source);
2843
+ this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
2844
2844
  }
2845
2845
  }
2846
2846
  },
@@ -2923,7 +2923,7 @@ exports.Abilities = {
2923
2923
  else {
2924
2924
  // It's not possible to know what pokemon were cured
2925
2925
  // Unlike a -hint, this is real information that battlers need, so we use a -message
2926
- this.add('-message', "(" + cureList.length + " of " + pokemon.side.name + "'s pokemon " + (cureList.length === 1 ? "was" : "were") + " cured by Natural Cure.)");
2926
+ this.add('-message', `(${cureList.length} of ${pokemon.side.name}'s pokemon ${cureList.length === 1 ? "was" : "were"} cured by Natural Cure.)`);
2927
2927
  for (const pkmn of cureList) {
2928
2928
  pkmn.showCure = false;
2929
2929
  }
@@ -3092,7 +3092,7 @@ exports.Abilities = {
3092
3092
  onTryBoost(boost, target, source, effect) {
3093
3093
  if (effect.name === 'Intimidate' && boost.atk) {
3094
3094
  delete boost.atk;
3095
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target);
3095
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', `[of] ${target}`);
3096
3096
  }
3097
3097
  },
3098
3098
  flags: { breakable: 1 },
@@ -3219,7 +3219,7 @@ exports.Abilities = {
3219
3219
  onTryBoost(boost, target, source, effect) {
3220
3220
  if (effect.name === 'Intimidate' && boost.atk) {
3221
3221
  delete boost.atk;
3222
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', '[of] ' + target);
3222
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', `[of] ${target}`);
3223
3223
  }
3224
3224
  },
3225
3225
  flags: { breakable: 1 },
@@ -3278,7 +3278,7 @@ exports.Abilities = {
3278
3278
  return;
3279
3279
  if (effect?.status) {
3280
3280
  const effectHolder = this.effectState.target;
3281
- this.add('-block', target, 'ability: Pastel Veil', '[of] ' + effectHolder);
3281
+ this.add('-block', target, 'ability: Pastel Veil', `[of] ${effectHolder}`);
3282
3282
  }
3283
3283
  return false;
3284
3284
  },
@@ -3314,8 +3314,8 @@ exports.Abilities = {
3314
3314
  source.item = yourItem.id;
3315
3315
  return;
3316
3316
  }
3317
- this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', '[of] ' + source);
3318
- this.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source);
3317
+ this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', `[of] ${source}`);
3318
+ this.add('-item', target, yourItem, '[from] ability: Pickpocket', `[of] ${source}`);
3319
3319
  }
3320
3320
  },
3321
3321
  flags: {},
@@ -3464,7 +3464,7 @@ exports.Abilities = {
3464
3464
  if (ability.flags['noreceiver'] || ability.id === 'noability')
3465
3465
  return;
3466
3466
  if (this.effectState.target.setAbility(ability)) {
3467
- this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target);
3467
+ this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', `[of] ${target}`);
3468
3468
  }
3469
3469
  },
3470
3470
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -3806,7 +3806,7 @@ exports.Abilities = {
3806
3806
  const dazzlingHolder = this.effectState.target;
3807
3807
  if ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {
3808
3808
  this.attrLastMove('[still]');
3809
- this.add('cant', dazzlingHolder, 'ability: Queenly Majesty', move, '[of] ' + target);
3809
+ this.add('cant', dazzlingHolder, 'ability: Queenly Majesty', move, `[of] ${target}`);
3810
3810
  return false;
3811
3811
  }
3812
3812
  },
@@ -3876,7 +3876,7 @@ exports.Abilities = {
3876
3876
  if (ability.flags['noreceiver'] || ability.id === 'noability')
3877
3877
  return;
3878
3878
  if (this.effectState.target.setAbility(ability)) {
3879
- this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', '[of] ' + target);
3879
+ this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', `[of] ${target}`);
3880
3880
  }
3881
3881
  },
3882
3882
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -4190,7 +4190,7 @@ exports.Abilities = {
4190
4190
  onTryBoost(boost, target, source, effect) {
4191
4191
  if (effect.name === 'Intimidate' && boost.atk) {
4192
4192
  delete boost.atk;
4193
- this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', '[of] ' + target);
4193
+ this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', `[of] ${target}`);
4194
4194
  }
4195
4195
  },
4196
4196
  flags: {},
@@ -4908,7 +4908,7 @@ exports.Abilities = {
4908
4908
  if (status.id === 'slp') {
4909
4909
  this.debug('Sweet Veil interrupts sleep');
4910
4910
  const effectHolder = this.effectState.target;
4911
- this.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);
4911
+ this.add('-block', target, 'ability: Sweet Veil', `[of] ${effectHolder}`);
4912
4912
  return null;
4913
4913
  }
4914
4914
  },
@@ -4916,7 +4916,7 @@ exports.Abilities = {
4916
4916
  if (status.id === 'yawn') {
4917
4917
  this.debug('Sweet Veil blocking yawn');
4918
4918
  const effectHolder = this.effectState.target;
4919
- this.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);
4919
+ this.add('-block', target, 'ability: Sweet Veil', `[of] ${effectHolder}`);
4920
4920
  return null;
4921
4921
  }
4922
4922
  },
@@ -4949,7 +4949,7 @@ exports.Abilities = {
4949
4949
  source.item = myItem.id;
4950
4950
  return;
4951
4951
  }
4952
- this.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon);
4952
+ this.add('-activate', source, 'ability: Symbiosis', myItem, `[of] ${pokemon}`);
4953
4953
  },
4954
4954
  flags: {},
4955
4955
  name: "Symbiosis",
@@ -5049,7 +5049,7 @@ exports.Abilities = {
5049
5049
  onBasePowerPriority: 30,
5050
5050
  onBasePower(basePower, attacker, defender, move) {
5051
5051
  const basePowerAfterMultiplier = this.modify(basePower, this.event.modifier);
5052
- this.debug('Base Power: ' + basePowerAfterMultiplier);
5052
+ this.debug(`Base Power: ${basePowerAfterMultiplier}`);
5053
5053
  if (basePowerAfterMultiplier <= 60) {
5054
5054
  this.debug('Technician boost');
5055
5055
  return this.chainModify(1.5);
@@ -5289,7 +5289,7 @@ exports.Abilities = {
5289
5289
  const target = this.sample(possibleTargets);
5290
5290
  const ability = target.getAbility();
5291
5291
  if (pokemon.setAbility(ability)) {
5292
- this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
5292
+ this.add('-ability', pokemon, ability, '[from] ability: Trace', `[of] ${target}`);
5293
5293
  }
5294
5294
  },
5295
5295
  flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
@@ -5521,10 +5521,10 @@ exports.Abilities = {
5521
5521
  if (!sourceAbility)
5522
5522
  return;
5523
5523
  if (target.isAlly(source)) {
5524
- this.add('-activate', target, 'Skill Swap', '', '', '[of] ' + source);
5524
+ this.add('-activate', target, 'Skill Swap', '', '', `[of] ${source}`);
5525
5525
  }
5526
5526
  else {
5527
- this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', '[of] ' + source);
5527
+ this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', `[of] ${source}`);
5528
5528
  }
5529
5529
  target.setAbility(sourceAbility);
5530
5530
  }
@@ -5659,7 +5659,7 @@ exports.Abilities = {
5659
5659
  }
5660
5660
  }
5661
5661
  if (showMsg && !effect.secondaries && effect.id !== 'octolock') {
5662
- this.add("-fail", target, "unboost", "[from] ability: White Smoke", "[of] " + target);
5662
+ this.add("-fail", target, "unboost", "[from] ability: White Smoke", `[of] ${target}`);
5663
5663
  }
5664
5664
  },
5665
5665
  flags: { breakable: 1 },