@pkmn/sim 0.9.27 → 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 (169) hide show
  1. package/build/cjs/config/formats.js +51 -51
  2. package/build/cjs/config/formats.js.map +1 -1
  3. package/build/cjs/data/abilities.js +83 -84
  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 +6 -6
  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/gen3/abilities.js +0 -2
  19. package/build/cjs/data/mods/gen3/abilities.js.map +1 -1
  20. package/build/cjs/data/mods/gen3/moves.js.map +1 -1
  21. package/build/cjs/data/mods/gen4/abilities.js +1 -1
  22. package/build/cjs/data/mods/gen4/abilities.js.map +1 -1
  23. package/build/cjs/data/mods/gen4/moves.js +31 -0
  24. package/build/cjs/data/mods/gen4/moves.js.map +1 -1
  25. package/build/cjs/data/mods/gen4/scripts.js +26 -0
  26. package/build/cjs/data/mods/gen4/scripts.js.map +1 -1
  27. package/build/cjs/data/mods/gen5/formats-data.js +1 -1
  28. package/build/cjs/data/mods/gen5/formats-data.js.map +1 -1
  29. package/build/cjs/data/mods/gen6/moves.js.map +1 -1
  30. package/build/cjs/data/mods/gen8/moves.js +1 -1
  31. package/build/cjs/data/mods/gen8/moves.js.map +1 -1
  32. package/build/cjs/data/moves.js +15 -9
  33. package/build/cjs/data/moves.js.map +1 -1
  34. package/build/cjs/data/pokemongo.js +1 -1
  35. package/build/cjs/data/text/moves.js +1 -1
  36. package/build/cjs/data/text/moves.js.map +1 -1
  37. package/build/cjs/lib/utils.d.ts +2 -0
  38. package/build/cjs/lib/utils.js +1 -1
  39. package/build/cjs/lib/utils.js.map +1 -1
  40. package/build/cjs/sim/battle-actions.js +25 -36
  41. package/build/cjs/sim/battle-actions.js.map +1 -1
  42. package/build/cjs/sim/battle-queue.d.ts +1 -1
  43. package/build/cjs/sim/battle-queue.js +0 -2
  44. package/build/cjs/sim/battle-queue.js.map +1 -1
  45. package/build/cjs/sim/battle-stream.js +2 -3
  46. package/build/cjs/sim/battle-stream.js.map +1 -1
  47. package/build/cjs/sim/battle.d.ts +13 -7
  48. package/build/cjs/sim/battle.js +185 -60
  49. package/build/cjs/sim/battle.js.map +1 -1
  50. package/build/cjs/sim/dex-abilities.d.ts +0 -1
  51. package/build/cjs/sim/dex-abilities.js +2 -2
  52. package/build/cjs/sim/dex-abilities.js.map +1 -1
  53. package/build/cjs/sim/dex-conditions.d.ts +11 -3
  54. package/build/cjs/sim/dex-conditions.js +2 -2
  55. package/build/cjs/sim/dex-conditions.js.map +1 -1
  56. package/build/cjs/sim/dex-data.js +7 -7
  57. package/build/cjs/sim/dex-data.js.map +1 -1
  58. package/build/cjs/sim/dex-formats.d.ts +2 -1
  59. package/build/cjs/sim/dex-formats.js.map +1 -1
  60. package/build/cjs/sim/dex-items.d.ts +3 -1
  61. package/build/cjs/sim/dex-items.js +3 -2
  62. package/build/cjs/sim/dex-items.js.map +1 -1
  63. package/build/cjs/sim/dex-moves.js +4 -4
  64. package/build/cjs/sim/dex-moves.js.map +1 -1
  65. package/build/cjs/sim/exported-global-types.d.ts +6 -0
  66. package/build/cjs/sim/field.js +9 -9
  67. package/build/cjs/sim/field.js.map +1 -1
  68. package/build/cjs/sim/global-types.d.ts +6 -0
  69. package/build/cjs/sim/pokemon.d.ts +8 -4
  70. package/build/cjs/sim/pokemon.js +61 -46
  71. package/build/cjs/sim/pokemon.js.map +1 -1
  72. package/build/cjs/sim/prng.d.ts +7 -4
  73. package/build/cjs/sim/prng.js +67 -16
  74. package/build/cjs/sim/prng.js.map +1 -1
  75. package/build/cjs/sim/side.js +9 -6
  76. package/build/cjs/sim/side.js.map +1 -1
  77. package/build/cjs/sim/team-validator.js +16 -17
  78. package/build/cjs/sim/team-validator.js.map +1 -1
  79. package/build/cjs/sim/tools/exhaustive-runner.js +3 -4
  80. package/build/cjs/sim/tools/exhaustive-runner.js.map +1 -1
  81. package/build/cjs/sim/tools/random-player-ai.js +1 -1
  82. package/build/cjs/sim/tools/random-player-ai.js.map +1 -1
  83. package/build/cjs/sim/tools/runner.js +2 -3
  84. package/build/cjs/sim/tools/runner.js.map +1 -1
  85. package/build/esm/config/formats.mjs +51 -51
  86. package/build/esm/config/formats.mjs.map +1 -1
  87. package/build/esm/data/abilities.mjs +83 -84
  88. package/build/esm/data/abilities.mjs.map +1 -1
  89. package/build/esm/data/aliases.mjs +3 -2
  90. package/build/esm/data/aliases.mjs.map +1 -1
  91. package/build/esm/data/conditions.mjs +3 -3
  92. package/build/esm/data/conditions.mjs.map +1 -1
  93. package/build/esm/data/formats-data.mjs +6 -6
  94. package/build/esm/data/formats-data.mjs.map +1 -1
  95. package/build/esm/data/items.mjs +55 -25
  96. package/build/esm/data/items.mjs.map +1 -1
  97. package/build/esm/data/legality.mjs +275 -23
  98. package/build/esm/data/legality.mjs.map +1 -1
  99. package/build/esm/data/mods/gen1/moves.mjs.map +1 -1
  100. package/build/esm/data/mods/gen1/scripts.mjs +2 -0
  101. package/build/esm/data/mods/gen1/scripts.mjs.map +1 -1
  102. package/build/esm/data/mods/gen3/abilities.mjs +0 -2
  103. package/build/esm/data/mods/gen3/abilities.mjs.map +1 -1
  104. package/build/esm/data/mods/gen3/moves.mjs.map +1 -1
  105. package/build/esm/data/mods/gen4/abilities.mjs +1 -1
  106. package/build/esm/data/mods/gen4/abilities.mjs.map +1 -1
  107. package/build/esm/data/mods/gen4/moves.mjs +31 -0
  108. package/build/esm/data/mods/gen4/moves.mjs.map +1 -1
  109. package/build/esm/data/mods/gen4/scripts.mjs +26 -0
  110. package/build/esm/data/mods/gen4/scripts.mjs.map +1 -1
  111. package/build/esm/data/mods/gen5/formats-data.mjs +1 -1
  112. package/build/esm/data/mods/gen5/formats-data.mjs.map +1 -1
  113. package/build/esm/data/mods/gen6/moves.mjs.map +1 -1
  114. package/build/esm/data/mods/gen8/moves.mjs +1 -1
  115. package/build/esm/data/mods/gen8/moves.mjs.map +1 -1
  116. package/build/esm/data/moves.mjs +15 -9
  117. package/build/esm/data/moves.mjs.map +1 -1
  118. package/build/esm/data/pokemongo.mjs +1 -1
  119. package/build/esm/data/text/moves.mjs +1 -1
  120. package/build/esm/data/text/moves.mjs.map +1 -1
  121. package/build/esm/lib/utils.d.mts +2 -0
  122. package/build/esm/lib/utils.mjs +1 -1
  123. package/build/esm/lib/utils.mjs.map +1 -1
  124. package/build/esm/sim/battle-actions.mjs +25 -36
  125. package/build/esm/sim/battle-actions.mjs.map +1 -1
  126. package/build/esm/sim/battle-queue.d.mts +1 -1
  127. package/build/esm/sim/battle-queue.mjs +0 -2
  128. package/build/esm/sim/battle-queue.mjs.map +1 -1
  129. package/build/esm/sim/battle-stream.mjs +2 -3
  130. package/build/esm/sim/battle-stream.mjs.map +1 -1
  131. package/build/esm/sim/battle.d.mts +13 -7
  132. package/build/esm/sim/battle.mjs +184 -59
  133. package/build/esm/sim/battle.mjs.map +1 -1
  134. package/build/esm/sim/dex-abilities.d.mts +0 -1
  135. package/build/esm/sim/dex-abilities.mjs +1 -1
  136. package/build/esm/sim/dex-abilities.mjs.map +1 -1
  137. package/build/esm/sim/dex-conditions.d.mts +11 -3
  138. package/build/esm/sim/dex-conditions.mjs +1 -1
  139. package/build/esm/sim/dex-conditions.mjs.map +1 -1
  140. package/build/esm/sim/dex-data.mjs +1 -1
  141. package/build/esm/sim/dex-data.mjs.map +1 -1
  142. package/build/esm/sim/dex-formats.d.mts +2 -1
  143. package/build/esm/sim/dex-formats.mjs.map +1 -1
  144. package/build/esm/sim/dex-items.d.mts +3 -1
  145. package/build/esm/sim/dex-items.mjs +2 -1
  146. package/build/esm/sim/dex-items.mjs.map +1 -1
  147. package/build/esm/sim/dex-moves.mjs +1 -1
  148. package/build/esm/sim/dex-moves.mjs.map +1 -1
  149. package/build/esm/sim/exported-global-types.d.mts +6 -0
  150. package/build/esm/sim/field.mjs +9 -9
  151. package/build/esm/sim/field.mjs.map +1 -1
  152. package/build/esm/sim/global-types.d.mts +6 -0
  153. package/build/esm/sim/pokemon.d.mts +8 -4
  154. package/build/esm/sim/pokemon.mjs +61 -46
  155. package/build/esm/sim/pokemon.mjs.map +1 -1
  156. package/build/esm/sim/prng.d.mts +7 -4
  157. package/build/esm/sim/prng.mjs +34 -16
  158. package/build/esm/sim/prng.mjs.map +1 -1
  159. package/build/esm/sim/side.mjs +8 -5
  160. package/build/esm/sim/side.mjs.map +1 -1
  161. package/build/esm/sim/team-validator.mjs +10 -11
  162. package/build/esm/sim/team-validator.mjs.map +1 -1
  163. package/build/esm/sim/tools/exhaustive-runner.mjs +3 -4
  164. package/build/esm/sim/tools/exhaustive-runner.mjs.map +1 -1
  165. package/build/esm/sim/tools/random-player-ai.mjs +1 -1
  166. package/build/esm/sim/tools/random-player-ai.mjs.map +1 -1
  167. package/build/esm/sim/tools/runner.mjs +2 -3
  168. package/build/esm/sim/tools/runner.mjs.map +1 -1
  169. package/package.json +2 -2
@@ -201,7 +201,7 @@ exports.Items = {
201
201
  onDamagingHit(damage, target, source, move) {
202
202
  this.add('-enditem', target, 'Air Balloon');
203
203
  target.item = '';
204
- target.itemState = { id: '', target };
204
+ this.clearEffectState(target.itemState);
205
205
  this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
206
206
  },
207
207
  onAfterSubDamage(damage, target, source, effect) {
@@ -209,7 +209,7 @@ exports.Items = {
209
209
  if (effect.effectType === 'Move') {
210
210
  this.add('-enditem', target, 'Air Balloon');
211
211
  target.item = '';
212
- target.itemState = { id: '', target };
212
+ this.clearEffectState(target.itemState);
213
213
  this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon'));
214
214
  }
215
215
  },
@@ -585,20 +585,19 @@ exports.Items = {
585
585
  blueorb: {
586
586
  name: "Blue Orb",
587
587
  spritenum: 41,
588
+ onSwitchInPriority: -1,
588
589
  onSwitchIn(pokemon) {
589
- if (pokemon.isActive && pokemon.baseSpecies.name === 'Kyogre') {
590
- this.queue.insertChoice({ choice: 'runPrimal', pokemon: pokemon });
590
+ if (pokemon.isActive && pokemon.baseSpecies.name === 'Kyogre' && !pokemon.transformed) {
591
+ pokemon.formeChange('Kyogre-Primal', this.effect, true);
591
592
  }
592
593
  },
593
- onPrimal(pokemon) {
594
- pokemon.formeChange('Kyogre-Primal', this.effect, true);
595
- },
596
594
  onTakeItem(item, source) {
597
595
  if (source.baseSpecies.baseSpecies === 'Kyogre')
598
596
  return false;
599
597
  return true;
600
598
  },
601
599
  itemUser: ["Kyogre"],
600
+ isPrimalOrb: true,
602
601
  num: 535,
603
602
  gen: 6,
604
603
  isNonstandard: "Past",
@@ -632,14 +631,14 @@ exports.Items = {
632
631
  fling: {
633
632
  basePower: 30,
634
633
  },
635
- onStart() {
634
+ onSwitchInPriority: -2,
635
+ onStart(pokemon) {
636
636
  this.effectState.started = true;
637
+ this.effect.onUpdate.call(this, pokemon);
637
638
  },
638
639
  onUpdate(pokemon) {
639
640
  if (!this.effectState.started || pokemon.transformed)
640
641
  return;
641
- if (this.queue.peek(true)?.choice === 'runSwitch')
642
- return;
643
642
  if (pokemon.hasAbility('protosynthesis') && !this.field.isWeather('sunnyday') && pokemon.useItem()) {
644
643
  pokemon.addVolatile('protosynthesis');
645
644
  }
@@ -1680,6 +1679,7 @@ exports.Items = {
1680
1679
  fling: {
1681
1680
  basePower: 10,
1682
1681
  },
1682
+ onSwitchInPriority: -1,
1683
1683
  onStart(pokemon) {
1684
1684
  if (!pokemon.ignoringItem() && this.field.isTerrain('electricterrain')) {
1685
1685
  pokemon.useItem();
@@ -2377,6 +2377,7 @@ exports.Items = {
2377
2377
  fling: {
2378
2378
  basePower: 10,
2379
2379
  },
2380
+ onSwitchInPriority: -1,
2380
2381
  onStart(pokemon) {
2381
2382
  if (!pokemon.ignoringItem() && this.field.isTerrain('grassyterrain')) {
2382
2383
  pokemon.useItem();
@@ -3893,20 +3894,40 @@ exports.Items = {
3893
3894
  onFoeAfterBoost(boost, target, source, effect) {
3894
3895
  if (effect?.name === 'Opportunist' || effect?.name === 'Mirror Herb')
3895
3896
  return;
3896
- const boostPlus = {};
3897
- let statsRaised = false;
3897
+ if (!this.effectState.boosts)
3898
+ this.effectState.boosts = {};
3899
+ const boostPlus = this.effectState.boosts;
3898
3900
  let i;
3899
3901
  for (i in boost) {
3900
3902
  if (boost[i] > 0) {
3901
- boostPlus[i] = boost[i];
3902
- statsRaised = true;
3903
+ boostPlus[i] = (boostPlus[i] || 0) + boost[i];
3904
+ this.effectState.ready = true;
3903
3905
  }
3904
3906
  }
3905
- if (!statsRaised)
3907
+ },
3908
+ onAnySwitchInPriority: -3,
3909
+ onAnySwitchIn() {
3910
+ if (!this.effectState.ready || !this.effectState.boosts)
3906
3911
  return;
3907
- const pokemon = this.effectState.target;
3908
- pokemon.useItem();
3909
- this.boost(boostPlus, pokemon);
3912
+ this.effectState.target.useItem();
3913
+ },
3914
+ onAnyAfterMove() {
3915
+ if (!this.effectState.ready || !this.effectState.boosts)
3916
+ return;
3917
+ this.effectState.target.useItem();
3918
+ },
3919
+ onResidualOrder: 29,
3920
+ onResidual(pokemon) {
3921
+ if (!this.effectState.ready || !this.effectState.boosts)
3922
+ return;
3923
+ this.effectState.target.useItem();
3924
+ },
3925
+ onUse(pokemon) {
3926
+ this.boost(this.effectState.boosts, pokemon);
3927
+ },
3928
+ onEnd() {
3929
+ delete this.effectState.boosts;
3930
+ delete this.effectState.ready;
3910
3931
  },
3911
3932
  num: 1883,
3912
3933
  gen: 9,
@@ -3917,6 +3938,7 @@ exports.Items = {
3917
3938
  fling: {
3918
3939
  basePower: 10,
3919
3940
  },
3941
+ onSwitchInPriority: -1,
3920
3942
  onStart(pokemon) {
3921
3943
  if (!pokemon.ignoringItem() && this.field.isTerrain('mistyterrain')) {
3922
3944
  pokemon.useItem();
@@ -4620,6 +4642,7 @@ exports.Items = {
4620
4642
  fling: {
4621
4643
  basePower: 10,
4622
4644
  },
4645
+ onSwitchInPriority: -1,
4623
4646
  onStart(pokemon) {
4624
4647
  if (!pokemon.ignoringItem() && this.field.isTerrain('psychicterrain')) {
4625
4648
  pokemon.useItem();
@@ -4849,20 +4872,19 @@ exports.Items = {
4849
4872
  redorb: {
4850
4873
  name: "Red Orb",
4851
4874
  spritenum: 390,
4875
+ onSwitchInPriority: -1,
4852
4876
  onSwitchIn(pokemon) {
4853
- if (pokemon.isActive && pokemon.baseSpecies.name === 'Groudon') {
4854
- this.queue.insertChoice({ choice: 'runPrimal', pokemon: pokemon });
4877
+ if (pokemon.isActive && pokemon.baseSpecies.name === 'Groudon' && !pokemon.transformed) {
4878
+ pokemon.formeChange('Groudon-Primal', this.effect, true);
4855
4879
  }
4856
4880
  },
4857
- onPrimal(pokemon) {
4858
- pokemon.formeChange('Groudon-Primal', this.effect, true);
4859
- },
4860
4881
  onTakeItem(item, source) {
4861
4882
  if (source.baseSpecies.baseSpecies === 'Groudon')
4862
4883
  return false;
4863
4884
  return true;
4864
4885
  },
4865
4886
  itemUser: ["Groudon"],
4887
+ isPrimalOrb: true,
4866
4888
  num: 534,
4867
4889
  gen: 6,
4868
4890
  isNonstandard: "Past",
@@ -4997,6 +5019,7 @@ exports.Items = {
4997
5019
  fling: {
4998
5020
  basePower: 100,
4999
5021
  },
5022
+ onSwitchInPriority: -1,
5000
5023
  onStart(pokemon) {
5001
5024
  if (!pokemon.ignoringItem() && this.field.getPseudoWeather('trickroom')) {
5002
5025
  pokemon.useItem();
@@ -7291,6 +7314,13 @@ exports.Items = {
7291
7314
  }
7292
7315
  },
7293
7316
  },
7317
+ onAnySwitchInPriority: -2,
7318
+ onAnySwitchIn() {
7319
+ this.effect.onUpdate.call(this, this.effectState.target);
7320
+ },
7321
+ onStart(pokemon) {
7322
+ this.effect.onUpdate.call(this, pokemon);
7323
+ },
7294
7324
  onUpdate(pokemon) {
7295
7325
  let activate = false;
7296
7326
  const boosts = {};
@@ -7450,7 +7480,7 @@ exports.Items = {
7450
7480
  basePower: 80,
7451
7481
  type: "Poison",
7452
7482
  },
7453
- onResidualOrder: 5,
7483
+ onResidualOrder: 10,
7454
7484
  onResidual(pokemon) {
7455
7485
  if (pokemon.hp <= pokemon.maxhp / 2) {
7456
7486
  pokemon.eatItem();
@@ -7517,7 +7547,7 @@ exports.Items = {
7517
7547
  basePower: 80,
7518
7548
  type: "Psychic",
7519
7549
  },
7520
- onResidualOrder: 5,
7550
+ onResidualOrder: 10,
7521
7551
  onResidual(pokemon) {
7522
7552
  if (pokemon.hp <= pokemon.maxhp / 2) {
7523
7553
  pokemon.eatItem();