@pkmn/sim 0.9.26 → 0.9.28

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 (189) hide show
  1. package/build/cjs/config/formats.js +79 -86
  2. package/build/cjs/config/formats.js.map +1 -1
  3. package/build/cjs/data/abilities.js +100 -116
  4. package/build/cjs/data/abilities.js.map +1 -1
  5. package/build/cjs/data/aliases.js +3 -2
  6. package/build/cjs/data/aliases.js.map +1 -1
  7. package/build/cjs/data/conditions.js +3 -3
  8. package/build/cjs/data/conditions.js.map +1 -1
  9. package/build/cjs/data/formats-data.js +12 -12
  10. package/build/cjs/data/formats-data.js.map +1 -1
  11. package/build/cjs/data/items.js +55 -25
  12. package/build/cjs/data/items.js.map +1 -1
  13. package/build/cjs/data/legality.js +275 -23
  14. package/build/cjs/data/legality.js.map +1 -1
  15. package/build/cjs/data/mods/gen1/moves.js.map +1 -1
  16. package/build/cjs/data/mods/gen1/scripts.js +2 -0
  17. package/build/cjs/data/mods/gen1/scripts.js.map +1 -1
  18. package/build/cjs/data/mods/gen2/moves.js +1 -1
  19. package/build/cjs/data/mods/gen2/moves.js.map +1 -1
  20. package/build/cjs/data/mods/gen3/abilities.js +0 -2
  21. package/build/cjs/data/mods/gen3/abilities.js.map +1 -1
  22. package/build/cjs/data/mods/gen3/moves.js.map +1 -1
  23. package/build/cjs/data/mods/gen4/abilities.js +1 -1
  24. package/build/cjs/data/mods/gen4/abilities.js.map +1 -1
  25. package/build/cjs/data/mods/gen4/formats-data.js +1 -1
  26. package/build/cjs/data/mods/gen4/formats-data.js.map +1 -1
  27. package/build/cjs/data/mods/gen4/moves.js +88 -0
  28. package/build/cjs/data/mods/gen4/moves.js.map +1 -1
  29. package/build/cjs/data/mods/gen4/scripts.js +26 -0
  30. package/build/cjs/data/mods/gen4/scripts.js.map +1 -1
  31. package/build/cjs/data/mods/gen5/conditions.js +1 -2
  32. package/build/cjs/data/mods/gen5/conditions.js.map +1 -1
  33. package/build/cjs/data/mods/gen5/formats-data.js +2 -2
  34. package/build/cjs/data/mods/gen5/formats-data.js.map +1 -1
  35. package/build/cjs/data/mods/gen6/moves.js.map +1 -1
  36. package/build/cjs/data/mods/gen8/abilities.js +0 -2
  37. package/build/cjs/data/mods/gen8/abilities.js.map +1 -1
  38. package/build/cjs/data/mods/gen8/moves.js +1 -1
  39. package/build/cjs/data/mods/gen8/moves.js.map +1 -1
  40. package/build/cjs/data/moves.js +22 -18
  41. package/build/cjs/data/moves.js.map +1 -1
  42. package/build/cjs/data/pokemongo.js +1 -1
  43. package/build/cjs/data/text/moves.js +1 -1
  44. package/build/cjs/data/text/moves.js.map +1 -1
  45. package/build/cjs/lib/utils.d.ts +8 -0
  46. package/build/cjs/lib/utils.js +21 -2
  47. package/build/cjs/lib/utils.js.map +1 -1
  48. package/build/cjs/sim/battle-actions.js +30 -39
  49. package/build/cjs/sim/battle-actions.js.map +1 -1
  50. package/build/cjs/sim/battle-queue.d.ts +1 -1
  51. package/build/cjs/sim/battle-queue.js +0 -2
  52. package/build/cjs/sim/battle-queue.js.map +1 -1
  53. package/build/cjs/sim/battle-stream.js +2 -3
  54. package/build/cjs/sim/battle-stream.js.map +1 -1
  55. package/build/cjs/sim/battle.d.ts +13 -7
  56. package/build/cjs/sim/battle.js +197 -70
  57. package/build/cjs/sim/battle.js.map +1 -1
  58. package/build/cjs/sim/dex-abilities.d.ts +0 -1
  59. package/build/cjs/sim/dex-abilities.js +2 -2
  60. package/build/cjs/sim/dex-abilities.js.map +1 -1
  61. package/build/cjs/sim/dex-conditions.d.ts +11 -3
  62. package/build/cjs/sim/dex-conditions.js +2 -2
  63. package/build/cjs/sim/dex-conditions.js.map +1 -1
  64. package/build/cjs/sim/dex-data.js +7 -7
  65. package/build/cjs/sim/dex-data.js.map +1 -1
  66. package/build/cjs/sim/dex-formats.d.ts +2 -1
  67. package/build/cjs/sim/dex-formats.js.map +1 -1
  68. package/build/cjs/sim/dex-items.d.ts +3 -1
  69. package/build/cjs/sim/dex-items.js +3 -2
  70. package/build/cjs/sim/dex-items.js.map +1 -1
  71. package/build/cjs/sim/dex-moves.js +4 -4
  72. package/build/cjs/sim/dex-moves.js.map +1 -1
  73. package/build/cjs/sim/exported-global-types.d.ts +6 -0
  74. package/build/cjs/sim/field.js +9 -9
  75. package/build/cjs/sim/field.js.map +1 -1
  76. package/build/cjs/sim/global-types.d.ts +6 -0
  77. package/build/cjs/sim/pokemon.d.ts +8 -4
  78. package/build/cjs/sim/pokemon.js +62 -47
  79. package/build/cjs/sim/pokemon.js.map +1 -1
  80. package/build/cjs/sim/prng.d.ts +57 -18
  81. package/build/cjs/sim/prng.js +171 -38
  82. package/build/cjs/sim/prng.js.map +1 -1
  83. package/build/cjs/sim/side.js +9 -6
  84. package/build/cjs/sim/side.js.map +1 -1
  85. package/build/cjs/sim/state.js +1 -1
  86. package/build/cjs/sim/state.js.map +1 -1
  87. package/build/cjs/sim/team-validator.js +16 -17
  88. package/build/cjs/sim/team-validator.js.map +1 -1
  89. package/build/cjs/sim/tools/exhaustive-runner.js +11 -12
  90. package/build/cjs/sim/tools/exhaustive-runner.js.map +1 -1
  91. package/build/cjs/sim/tools/random-player-ai.js +5 -5
  92. package/build/cjs/sim/tools/random-player-ai.js.map +1 -1
  93. package/build/cjs/sim/tools/runner.js +7 -8
  94. package/build/cjs/sim/tools/runner.js.map +1 -1
  95. package/build/esm/config/formats.mjs +79 -86
  96. package/build/esm/config/formats.mjs.map +1 -1
  97. package/build/esm/data/abilities.mjs +100 -116
  98. package/build/esm/data/abilities.mjs.map +1 -1
  99. package/build/esm/data/aliases.mjs +3 -2
  100. package/build/esm/data/aliases.mjs.map +1 -1
  101. package/build/esm/data/conditions.mjs +3 -3
  102. package/build/esm/data/conditions.mjs.map +1 -1
  103. package/build/esm/data/formats-data.mjs +12 -12
  104. package/build/esm/data/formats-data.mjs.map +1 -1
  105. package/build/esm/data/items.mjs +55 -25
  106. package/build/esm/data/items.mjs.map +1 -1
  107. package/build/esm/data/legality.mjs +275 -23
  108. package/build/esm/data/legality.mjs.map +1 -1
  109. package/build/esm/data/mods/gen1/moves.mjs.map +1 -1
  110. package/build/esm/data/mods/gen1/scripts.mjs +2 -0
  111. package/build/esm/data/mods/gen1/scripts.mjs.map +1 -1
  112. package/build/esm/data/mods/gen2/moves.mjs +1 -1
  113. package/build/esm/data/mods/gen2/moves.mjs.map +1 -1
  114. package/build/esm/data/mods/gen3/abilities.mjs +0 -2
  115. package/build/esm/data/mods/gen3/abilities.mjs.map +1 -1
  116. package/build/esm/data/mods/gen3/moves.mjs.map +1 -1
  117. package/build/esm/data/mods/gen4/abilities.mjs +1 -1
  118. package/build/esm/data/mods/gen4/abilities.mjs.map +1 -1
  119. package/build/esm/data/mods/gen4/formats-data.mjs +1 -1
  120. package/build/esm/data/mods/gen4/formats-data.mjs.map +1 -1
  121. package/build/esm/data/mods/gen4/moves.mjs +88 -0
  122. package/build/esm/data/mods/gen4/moves.mjs.map +1 -1
  123. package/build/esm/data/mods/gen4/scripts.mjs +26 -0
  124. package/build/esm/data/mods/gen4/scripts.mjs.map +1 -1
  125. package/build/esm/data/mods/gen5/conditions.mjs +1 -2
  126. package/build/esm/data/mods/gen5/conditions.mjs.map +1 -1
  127. package/build/esm/data/mods/gen5/formats-data.mjs +2 -2
  128. package/build/esm/data/mods/gen5/formats-data.mjs.map +1 -1
  129. package/build/esm/data/mods/gen6/moves.mjs.map +1 -1
  130. package/build/esm/data/mods/gen8/abilities.mjs +0 -2
  131. package/build/esm/data/mods/gen8/abilities.mjs.map +1 -1
  132. package/build/esm/data/mods/gen8/moves.mjs +1 -1
  133. package/build/esm/data/mods/gen8/moves.mjs.map +1 -1
  134. package/build/esm/data/moves.mjs +22 -18
  135. package/build/esm/data/moves.mjs.map +1 -1
  136. package/build/esm/data/pokemongo.mjs +1 -1
  137. package/build/esm/data/text/moves.mjs +1 -1
  138. package/build/esm/data/text/moves.mjs.map +1 -1
  139. package/build/esm/lib/utils.d.mts +8 -0
  140. package/build/esm/lib/utils.mjs +18 -2
  141. package/build/esm/lib/utils.mjs.map +1 -1
  142. package/build/esm/sim/battle-actions.mjs +30 -39
  143. package/build/esm/sim/battle-actions.mjs.map +1 -1
  144. package/build/esm/sim/battle-queue.d.mts +1 -1
  145. package/build/esm/sim/battle-queue.mjs +0 -2
  146. package/build/esm/sim/battle-queue.mjs.map +1 -1
  147. package/build/esm/sim/battle-stream.mjs +2 -3
  148. package/build/esm/sim/battle-stream.mjs.map +1 -1
  149. package/build/esm/sim/battle.d.mts +13 -7
  150. package/build/esm/sim/battle.mjs +196 -69
  151. package/build/esm/sim/battle.mjs.map +1 -1
  152. package/build/esm/sim/dex-abilities.d.mts +0 -1
  153. package/build/esm/sim/dex-abilities.mjs +1 -1
  154. package/build/esm/sim/dex-abilities.mjs.map +1 -1
  155. package/build/esm/sim/dex-conditions.d.mts +11 -3
  156. package/build/esm/sim/dex-conditions.mjs +1 -1
  157. package/build/esm/sim/dex-conditions.mjs.map +1 -1
  158. package/build/esm/sim/dex-data.mjs +1 -1
  159. package/build/esm/sim/dex-data.mjs.map +1 -1
  160. package/build/esm/sim/dex-formats.d.mts +2 -1
  161. package/build/esm/sim/dex-formats.mjs.map +1 -1
  162. package/build/esm/sim/dex-items.d.mts +3 -1
  163. package/build/esm/sim/dex-items.mjs +2 -1
  164. package/build/esm/sim/dex-items.mjs.map +1 -1
  165. package/build/esm/sim/dex-moves.mjs +1 -1
  166. package/build/esm/sim/dex-moves.mjs.map +1 -1
  167. package/build/esm/sim/exported-global-types.d.mts +6 -0
  168. package/build/esm/sim/field.mjs +9 -9
  169. package/build/esm/sim/field.mjs.map +1 -1
  170. package/build/esm/sim/global-types.d.mts +6 -0
  171. package/build/esm/sim/pokemon.d.mts +8 -4
  172. package/build/esm/sim/pokemon.mjs +62 -47
  173. package/build/esm/sim/pokemon.mjs.map +1 -1
  174. package/build/esm/sim/prng.d.mts +57 -18
  175. package/build/esm/sim/prng.mjs +134 -36
  176. package/build/esm/sim/prng.mjs.map +1 -1
  177. package/build/esm/sim/side.mjs +8 -5
  178. package/build/esm/sim/side.mjs.map +1 -1
  179. package/build/esm/sim/state.mjs +1 -1
  180. package/build/esm/sim/state.mjs.map +1 -1
  181. package/build/esm/sim/team-validator.mjs +10 -11
  182. package/build/esm/sim/team-validator.mjs.map +1 -1
  183. package/build/esm/sim/tools/exhaustive-runner.mjs +11 -12
  184. package/build/esm/sim/tools/exhaustive-runner.mjs.map +1 -1
  185. package/build/esm/sim/tools/random-player-ai.mjs +5 -5
  186. package/build/esm/sim/tools/random-player-ai.mjs.map +1 -1
  187. package/build/esm/sim/tools/runner.mjs +7 -8
  188. package/build/esm/sim/tools/runner.mjs.map +1 -1
  189. package/package.json +3 -2
@@ -198,7 +198,7 @@ export const Items = {
198
198
  onDamagingHit(damage, target, source, move) {
199
199
  this.add('-enditem', target, 'Air Balloon');
200
200
  target.item = '';
201
- target.itemState = { id: '', target };
201
+ this.clearEffectState(target.itemState);
202
202
  this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
203
203
  },
204
204
  onAfterSubDamage(damage, target, source, effect) {
@@ -206,7 +206,7 @@ export const Items = {
206
206
  if (effect.effectType === 'Move') {
207
207
  this.add('-enditem', target, 'Air Balloon');
208
208
  target.item = '';
209
- target.itemState = { id: '', target };
209
+ this.clearEffectState(target.itemState);
210
210
  this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
211
211
  }
212
212
  },
@@ -582,20 +582,19 @@ export const Items = {
582
582
  blueorb: {
583
583
  name: "Blue Orb",
584
584
  spritenum: 41,
585
+ onSwitchInPriority: -1,
585
586
  onSwitchIn(pokemon) {
586
- if (pokemon.isActive && pokemon.baseSpecies.name === 'Kyogre') {
587
- this.queue.insertChoice({ choice: 'runPrimal', pokemon: pokemon });
587
+ if (pokemon.isActive && pokemon.baseSpecies.name === 'Kyogre' && !pokemon.transformed) {
588
+ pokemon.formeChange('Kyogre-Primal', this.effect, true);
588
589
  }
589
590
  },
590
- onPrimal(pokemon) {
591
- pokemon.formeChange('Kyogre-Primal', this.effect, true);
592
- },
593
591
  onTakeItem(item, source) {
594
592
  if (source.baseSpecies.baseSpecies === 'Kyogre')
595
593
  return false;
596
594
  return true;
597
595
  },
598
596
  itemUser: ["Kyogre"],
597
+ isPrimalOrb: true,
599
598
  num: 535,
600
599
  gen: 6,
601
600
  isNonstandard: "Past",
@@ -629,14 +628,14 @@ export const Items = {
629
628
  fling: {
630
629
  basePower: 30,
631
630
  },
632
- onStart() {
631
+ onSwitchInPriority: -2,
632
+ onStart(pokemon) {
633
633
  this.effectState.started = true;
634
+ this.effect.onUpdate.call(this, pokemon);
634
635
  },
635
636
  onUpdate(pokemon) {
636
637
  if (!this.effectState.started || pokemon.transformed)
637
638
  return;
638
- if (this.queue.peek(true)?.choice === 'runSwitch')
639
- return;
640
639
  if (pokemon.hasAbility('protosynthesis') && !this.field.isWeather('sunnyday') && pokemon.useItem()) {
641
640
  pokemon.addVolatile('protosynthesis');
642
641
  }
@@ -1677,6 +1676,7 @@ export const Items = {
1677
1676
  fling: {
1678
1677
  basePower: 10,
1679
1678
  },
1679
+ onSwitchInPriority: -1,
1680
1680
  onStart(pokemon) {
1681
1681
  if (!pokemon.ignoringItem() && this.field.isTerrain('electricterrain')) {
1682
1682
  pokemon.useItem();
@@ -2374,6 +2374,7 @@ export const Items = {
2374
2374
  fling: {
2375
2375
  basePower: 10,
2376
2376
  },
2377
+ onSwitchInPriority: -1,
2377
2378
  onStart(pokemon) {
2378
2379
  if (!pokemon.ignoringItem() && this.field.isTerrain('grassyterrain')) {
2379
2380
  pokemon.useItem();
@@ -3890,20 +3891,40 @@ export const Items = {
3890
3891
  onFoeAfterBoost(boost, target, source, effect) {
3891
3892
  if (effect?.name === 'Opportunist' || effect?.name === 'Mirror Herb')
3892
3893
  return;
3893
- const boostPlus = {};
3894
- let statsRaised = false;
3894
+ if (!this.effectState.boosts)
3895
+ this.effectState.boosts = {};
3896
+ const boostPlus = this.effectState.boosts;
3895
3897
  let i;
3896
3898
  for (i in boost) {
3897
3899
  if (boost[i] > 0) {
3898
- boostPlus[i] = boost[i];
3899
- statsRaised = true;
3900
+ boostPlus[i] = (boostPlus[i] || 0) + boost[i];
3901
+ this.effectState.ready = true;
3900
3902
  }
3901
3903
  }
3902
- if (!statsRaised)
3904
+ },
3905
+ onAnySwitchInPriority: -3,
3906
+ onAnySwitchIn() {
3907
+ if (!this.effectState.ready || !this.effectState.boosts)
3903
3908
  return;
3904
- const pokemon = this.effectState.target;
3905
- pokemon.useItem();
3906
- this.boost(boostPlus, pokemon);
3909
+ this.effectState.target.useItem();
3910
+ },
3911
+ onAnyAfterMove() {
3912
+ if (!this.effectState.ready || !this.effectState.boosts)
3913
+ return;
3914
+ this.effectState.target.useItem();
3915
+ },
3916
+ onResidualOrder: 29,
3917
+ onResidual(pokemon) {
3918
+ if (!this.effectState.ready || !this.effectState.boosts)
3919
+ return;
3920
+ this.effectState.target.useItem();
3921
+ },
3922
+ onUse(pokemon) {
3923
+ this.boost(this.effectState.boosts, pokemon);
3924
+ },
3925
+ onEnd() {
3926
+ delete this.effectState.boosts;
3927
+ delete this.effectState.ready;
3907
3928
  },
3908
3929
  num: 1883,
3909
3930
  gen: 9,
@@ -3914,6 +3935,7 @@ export const Items = {
3914
3935
  fling: {
3915
3936
  basePower: 10,
3916
3937
  },
3938
+ onSwitchInPriority: -1,
3917
3939
  onStart(pokemon) {
3918
3940
  if (!pokemon.ignoringItem() && this.field.isTerrain('mistyterrain')) {
3919
3941
  pokemon.useItem();
@@ -4617,6 +4639,7 @@ export const Items = {
4617
4639
  fling: {
4618
4640
  basePower: 10,
4619
4641
  },
4642
+ onSwitchInPriority: -1,
4620
4643
  onStart(pokemon) {
4621
4644
  if (!pokemon.ignoringItem() && this.field.isTerrain('psychicterrain')) {
4622
4645
  pokemon.useItem();
@@ -4846,20 +4869,19 @@ export const Items = {
4846
4869
  redorb: {
4847
4870
  name: "Red Orb",
4848
4871
  spritenum: 390,
4872
+ onSwitchInPriority: -1,
4849
4873
  onSwitchIn(pokemon) {
4850
- if (pokemon.isActive && pokemon.baseSpecies.name === 'Groudon') {
4851
- this.queue.insertChoice({ choice: 'runPrimal', pokemon: pokemon });
4874
+ if (pokemon.isActive && pokemon.baseSpecies.name === 'Groudon' && !pokemon.transformed) {
4875
+ pokemon.formeChange('Groudon-Primal', this.effect, true);
4852
4876
  }
4853
4877
  },
4854
- onPrimal(pokemon) {
4855
- pokemon.formeChange('Groudon-Primal', this.effect, true);
4856
- },
4857
4878
  onTakeItem(item, source) {
4858
4879
  if (source.baseSpecies.baseSpecies === 'Groudon')
4859
4880
  return false;
4860
4881
  return true;
4861
4882
  },
4862
4883
  itemUser: ["Groudon"],
4884
+ isPrimalOrb: true,
4863
4885
  num: 534,
4864
4886
  gen: 6,
4865
4887
  isNonstandard: "Past",
@@ -4994,6 +5016,7 @@ export const Items = {
4994
5016
  fling: {
4995
5017
  basePower: 100,
4996
5018
  },
5019
+ onSwitchInPriority: -1,
4997
5020
  onStart(pokemon) {
4998
5021
  if (!pokemon.ignoringItem() && this.field.getPseudoWeather('trickroom')) {
4999
5022
  pokemon.useItem();
@@ -7288,6 +7311,13 @@ export const Items = {
7288
7311
  }
7289
7312
  },
7290
7313
  },
7314
+ onAnySwitchInPriority: -2,
7315
+ onAnySwitchIn() {
7316
+ this.effect.onUpdate.call(this, this.effectState.target);
7317
+ },
7318
+ onStart(pokemon) {
7319
+ this.effect.onUpdate.call(this, pokemon);
7320
+ },
7291
7321
  onUpdate(pokemon) {
7292
7322
  let activate = false;
7293
7323
  const boosts = {};
@@ -7447,7 +7477,7 @@ export const Items = {
7447
7477
  basePower: 80,
7448
7478
  type: "Poison",
7449
7479
  },
7450
- onResidualOrder: 5,
7480
+ onResidualOrder: 10,
7451
7481
  onResidual(pokemon) {
7452
7482
  if (pokemon.hp <= pokemon.maxhp / 2) {
7453
7483
  pokemon.eatItem();
@@ -7514,7 +7544,7 @@ export const Items = {
7514
7544
  basePower: 80,
7515
7545
  type: "Psychic",
7516
7546
  },
7517
- onResidualOrder: 5,
7547
+ onResidualOrder: 10,
7518
7548
  onResidual(pokemon) {
7519
7549
  if (pokemon.hp <= pokemon.maxhp / 2) {
7520
7550
  pokemon.eatItem();