@pkmn/sim 0.5.25 → 0.5.26

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.
@@ -51,11 +51,9 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
51
51
  tier: "NU",
52
52
  },
53
53
  caterpie: {
54
- randomBattleMoves: ["stringshot", "tackle"],
55
54
  tier: "LC",
56
55
  },
57
56
  metapod: {
58
- randomBattleMoves: ["harden", "stringshot", "tackle"],
59
57
  tier: "NFE",
60
58
  },
61
59
  butterfree: {
@@ -64,11 +62,9 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
64
62
  tier: "PU",
65
63
  },
66
64
  weedle: {
67
- randomBattleMoves: ["poisonsting", "stringshot"],
68
65
  tier: "LC",
69
66
  },
70
67
  kakuna: {
71
- randomBattleMoves: ["poisonsting", "stringshot"],
72
68
  tier: "NFE",
73
69
  },
74
70
  beedrill: {
@@ -655,7 +651,6 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
655
651
  tier: "OU",
656
652
  },
657
653
  magikarp: {
658
- randomBattleMoves: ["splash", "tackle"],
659
654
  tier: "LC",
660
655
  },
661
656
  gyarados: {
@@ -268,30 +268,42 @@ export const Moves: {[k: string]: ModdedMoveData} = {
268
268
  },
269
269
  },
270
270
  disable: {
271
- inherit: true,
271
+ num: 50,
272
+ accuracy: 55,
273
+ basePower: 0,
274
+ category: "Status",
275
+ name: "Disable",
276
+ pp: 20,
277
+ priority: 0,
278
+ flags: {protect: 1, mirror: 1, bypasssub: 1},
279
+ volatileStatus: 'disable',
280
+ onTryHit(target) {
281
+ // This function should not return if the checks are met. Adding && undefined ensures this happens.
282
+ return target.moveSlots.some(ms => ms.pp > 0) &&
283
+ !('disable' in target.volatiles) &&
284
+ undefined;
285
+ },
272
286
  condition: {
273
- duration: 4,
274
- durationCallback(target, source, effect) {
275
- const duration = this.random(1, 7);
276
- return duration;
277
- },
278
287
  onStart(pokemon) {
279
- if (!this.queue.willMove(pokemon)) {
280
- this.effectState.duration++;
281
- }
282
- const moves = pokemon.moves;
283
- const move = this.dex.moves.get(this.sample(moves));
284
- this.add('-start', pokemon, 'Disable', move.name);
285
- this.effectState.move = move.id;
286
- return;
288
+ // disable can only select moves that have pp > 0, hence the onTryHit modification
289
+ const moveSlot = this.sample(pokemon.moveSlots.filter(ms => ms.pp > 0));
290
+ this.add('-start', pokemon, 'Disable', moveSlot.move);
291
+ this.effectState.move = moveSlot.id;
292
+ // 1-8 turns (which will in effect translate to 0-7 missed turns for the target)
293
+ this.effectState.time = this.random(1, 9);
287
294
  },
288
- onResidualOrder: 14,
289
295
  onEnd(pokemon) {
290
296
  this.add('-end', pokemon, 'Disable');
291
297
  },
292
- onBeforeMove(attacker, defender, move) {
298
+ onBeforeMovePriority: 7,
299
+ onBeforeMove(pokemon, target, move) {
300
+ pokemon.volatiles['disable'].time--;
301
+ if (!pokemon.volatiles['disable'].time) {
302
+ pokemon.removeVolatile('disable');
303
+ return;
304
+ }
293
305
  if (move.id === this.effectState.move) {
294
- this.add('cant', attacker, 'Disable', move);
306
+ this.add('cant', pokemon, 'Disable', move);
295
307
  return false;
296
308
  }
297
309
  },
@@ -303,6 +315,9 @@ export const Moves: {[k: string]: ModdedMoveData} = {
303
315
  }
304
316
  },
305
317
  },
318
+ secondary: null,
319
+ target: "normal",
320
+ type: "Normal",
306
321
  },
307
322
  dizzypunch: {
308
323
  inherit: true,
@@ -403,19 +418,35 @@ export const Moves: {[k: string]: ModdedMoveData} = {
403
418
  this.add('-clearallboost', '[silent]');
404
419
  for (const pokemon of this.getAllActive()) {
405
420
  pokemon.clearBoosts();
406
-
407
421
  if (pokemon !== source) {
408
422
  pokemon.cureStatus(true);
409
423
  }
410
424
  if (pokemon.status === 'tox') {
411
425
  pokemon.setStatus('psn');
412
426
  }
413
- for (const id of Object.keys(pokemon.volatiles)) {
414
- if (id === 'residualdmg') {
415
- pokemon.volatiles[id].counter = 0;
427
+ // should only clear a specific set of volatiles and does not clear the toxic counter
428
+ const silentHack = '|[silent]';
429
+ const silentHackVolatiles = ['disable', 'confusion'];
430
+ const hazeVolatiles: {[key: string]: string} = {
431
+ 'disable': '',
432
+ 'confusion': '',
433
+ 'mist': 'Mist',
434
+ 'focusenergy': 'move: Focus Energy',
435
+ 'leechseed': 'move: Leech Seed',
436
+ 'lightscreen': 'Light Screen',
437
+ 'reflect': 'Reflect',
438
+ };
439
+ for (const v in hazeVolatiles) {
440
+ if (!pokemon.removeVolatile(v)) {
441
+ continue;
442
+ }
443
+ if (silentHackVolatiles.includes(v)) {
444
+ // these volatiles have their own onEnd method that prints, so to avoid
445
+ // double printing and ensure they are still silent, we need to tack on a
446
+ // silent attribute at the end
447
+ this.log[this.log.length - 1] += silentHack;
416
448
  } else {
417
- pokemon.removeVolatile(id);
418
- this.add('-end', pokemon, id, '[silent]');
449
+ this.add('-end', pokemon, hazeVolatiles[v], '[silent]');
419
450
  }
420
451
  }
421
452
  }
@@ -24,7 +24,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
24
24
  tier: "NFE",
25
25
  },
26
26
  charizard: {
27
- randomBattleMoves: ["acrobatics", "airslash", "earthquake", "fireblast", "flareblitz", "roost", "swordsdance", "willowisp"],
27
+ randomBattleMoves: ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
28
28
  randomDoubleBattleMoves: ["airslash", "dragonpulse", "fireblast", "heatwave", "overheat", "protect", "roost", "tailwind"],
29
29
  tier: "NU",
30
30
  doublesTier: "(DUU)",
@@ -54,7 +54,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
54
54
  doublesTier: "(DUU)",
55
55
  },
56
56
  blastoisemega: {
57
- randomBattleMoves: ["aurasphere", "darkpulse", "dragontail", "hydropump", "icebeam", "rapidspin", "scald"],
57
+ randomBattleMoves: ["aurasphere", "darkpulse", "hydropump", "icebeam", "rapidspin", "scald"],
58
58
  randomDoubleBattleMoves: ["aurasphere", "darkpulse", "fakeout", "followme", "hydropump", "icebeam", "icywind", "muddywater", "protect", "scald"],
59
59
  tier: "UU",
60
60
  doublesTier: "DUU",
@@ -686,7 +686,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
686
686
  tier: "LC",
687
687
  },
688
688
  seaking: {
689
- randomBattleMoves: ["drillrun", "icebeam", "knockoff", "megahorn", "scald", "waterfall"],
689
+ randomBattleMoves: ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
690
690
  randomDoubleBattleMoves: ["drillrun", "icebeam", "icywind", "knockoff", "megahorn", "protect", "surf", "waterfall"],
691
691
  tier: "(PU)",
692
692
  doublesTier: "(DUU)",
@@ -1693,7 +1693,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1693
1693
  tier: "NFE",
1694
1694
  },
1695
1695
  aggron: {
1696
- randomBattleMoves: ["aquatail", "autotomize", "earthquake", "headsmash", "heavyslam", "lowkick", "stealthrock"],
1696
+ randomBattleMoves: ["aquatail", "autotomize", "earthquake", "headsmash", "heavyslam", "stealthrock"],
1697
1697
  randomDoubleBattleMoves: ["aquatail", "earthquake", "headsmash", "heavyslam", "lowkick", "protect", "rockslide", "stealthrock"],
1698
1698
  tier: "NU",
1699
1699
  doublesTier: "(DUU)",
@@ -1819,7 +1819,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1819
1819
  doublesTier: "DUU",
1820
1820
  },
1821
1821
  torkoal: {
1822
- randomBattleMoves: ["earthpower", "fireblast", "hiddenpowergrass", "lavaplume", "rapidspin", "shellsmash", "stealthrock", "yawn"],
1822
+ randomBattleMoves: ["earthpower", "lavaplume", "rapidspin", "stealthrock", "yawn"],
1823
1823
  randomDoubleBattleMoves: ["earthpower", "fireblast", "heatwave", "hiddenpowergrass", "protect", "shellsmash", "willowisp"],
1824
1824
  tier: "PU",
1825
1825
  doublesTier: "(DUU)",
@@ -1846,7 +1846,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1846
1846
  tier: "NFE",
1847
1847
  },
1848
1848
  flygon: {
1849
- randomBattleMoves: ["defog", "earthquake", "fireblast", "firepunch", "outrage", "roost", "stoneedge", "uturn"],
1849
+ randomBattleMoves: ["defog", "earthquake", "fireblast", "outrage", "roost", "stoneedge", "uturn"],
1850
1850
  randomDoubleBattleMoves: ["dragonclaw", "earthquake", "feint", "fireblast", "firepunch", "protect", "rockslide", "tailwind", "uturn"],
1851
1851
  tier: "RU",
1852
1852
  doublesTier: "(DUU)",
@@ -1855,7 +1855,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1855
1855
  tier: "LC",
1856
1856
  },
1857
1857
  cacturne: {
1858
- randomBattleMoves: ["darkpulse", "drainpunch", "focusblast", "gigadrain", "seedbomb", "spikes", "suckerpunch", "swordsdance"],
1858
+ randomBattleMoves: ["darkpulse", "drainpunch", "focusblast", "seedbomb", "spikes", "suckerpunch", "swordsdance"],
1859
1859
  randomDoubleBattleMoves: ["drainpunch", "seedbomb", "spikyshield", "substitute", "suckerpunch", "swordsdance"],
1860
1860
  tier: "PU",
1861
1861
  doublesTier: "(DUU)",
@@ -1882,7 +1882,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1882
1882
  doublesTier: "(DUU)",
1883
1883
  },
1884
1884
  seviper: {
1885
- randomBattleMoves: ["coil", "darkpulse", "earthquake", "flamethrower", "gigadrain", "poisonjab", "sludgewave", "suckerpunch", "switcheroo"],
1885
+ randomBattleMoves: ["darkpulse", "earthquake", "flamethrower", "gigadrain", "poisonjab", "sludgewave", "suckerpunch", "switcheroo"],
1886
1886
  randomDoubleBattleMoves: ["aquatail", "earthquake", "flamethrower", "gigadrain", "glare", "poisonjab", "protect", "sludgebomb", "suckerpunch"],
1887
1887
  tier: "(PU)",
1888
1888
  doublesTier: "(DUU)",
@@ -2021,7 +2021,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2021
2021
  doublesTier: "(DUU)",
2022
2022
  },
2023
2023
  absolmega: {
2024
- randomBattleMoves: ["fireblast", "icebeam", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
2024
+ randomBattleMoves: ["icebeam", "knockoff", "playrough", "pursuit", "suckerpunch", "superpower", "swordsdance"],
2025
2025
  randomDoubleBattleMoves: ["fireblast", "knockoff", "playrough", "protect", "suckerpunch", "superpower", "swordsdance"],
2026
2026
  tier: "UU",
2027
2027
  doublesTier: "(DUU)",
@@ -2147,7 +2147,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2147
2147
  doublesTier: "(DUU)",
2148
2148
  },
2149
2149
  latiasmega: {
2150
- randomBattleMoves: ["calmmind", "dracometeor", "dragonpulse", "hiddenpowerfire", "psyshock", "roost", "substitute", "surf"],
2150
+ randomBattleMoves: ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "substitute", "surf"],
2151
2151
  randomDoubleBattleMoves: ["dragonpulse", "healpulse", "helpinghand", "lightscreen", "protect", "psychic", "reflect", "tailwind"],
2152
2152
  tier: "(OU)",
2153
2153
  doublesTier: "(DUU)",
@@ -3392,7 +3392,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3392
3392
  tier: "NFE",
3393
3393
  },
3394
3394
  hydreigon: {
3395
- randomBattleMoves: ["darkpulse", "dracometeor", "dragonpulse", "earthpower", "fireblast", "flashcannon", "roost", "superpower", "uturn"],
3395
+ randomBattleMoves: ["darkpulse", "dracometeor", "fireblast", "flashcannon", "roost", "superpower", "uturn"],
3396
3396
  randomDoubleBattleMoves: ["darkpulse", "dracometeor", "dragonpulse", "earthpower", "fireblast", "flashcannon", "protect", "roost", "superpower", "tailwind", "uturn"],
3397
3397
  tier: "UU",
3398
3398
  doublesTier: "DOU",
@@ -3401,7 +3401,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3401
3401
  tier: "LC",
3402
3402
  },
3403
3403
  volcarona: {
3404
- randomBattleMoves: ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerground", "hiddenpowerice", "quiverdance", "roost"],
3404
+ randomBattleMoves: ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerice", "quiverdance", "roost"],
3405
3405
  randomDoubleBattleMoves: ["bugbuzz", "fierydance", "fireblast", "gigadrain", "heatwave", "hiddenpowerice", "protect", "quiverdance", "ragepowder", "roost", "tailwind", "willowisp"],
3406
3406
  tier: "UUBL",
3407
3407
  doublesTier: "DUU",
@@ -3449,7 +3449,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3449
3449
  doublesTier: "(DUU)",
3450
3450
  },
3451
3451
  reshiram: {
3452
- randomBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "flamecharge", "roost", "stoneedge", "toxic"],
3452
+ randomBattleMoves: ["blueflare", "dracometeor", "earthpower", "roost", "stoneedge", "toxic"],
3453
3453
  randomDoubleBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "flamecharge", "heatwave", "protect", "roost", "tailwind"],
3454
3454
  tier: "Uber",
3455
3455
  doublesTier: "DUber",
@@ -3805,7 +3805,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3805
3805
  doublesTier: "DUU",
3806
3806
  },
3807
3807
  klefki: {
3808
- randomBattleMoves: ["foulplay", "lightscreen", "magnetrise", "playrough", "reflect", "spikes", "thunderwave", "toxic"],
3808
+ randomBattleMoves: ["foulplay", "lightscreen", "playrough", "reflect", "spikes", "thunderwave", "toxic"],
3809
3809
  randomDoubleBattleMoves: ["dazzlinggleam", "flashcannon", "lightscreen", "playrough", "protect", "reflect", "safeguard", "substitute", "thunderwave"],
3810
3810
  tier: "UU",
3811
3811
  doublesTier: "(DUU)",
@@ -165,13 +165,12 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = {
165
165
  inherit: true,
166
166
  baseStats: {hp: 90, atk: 85, def: 80, spa: 105, spd: 80, spe: 110},
167
167
  },
168
- justyke: {
168
+ mumbao: {
169
169
  inherit: true,
170
- abilities: {0: "Levitate", 1: "Bulletproof", H: "Justified"},
170
+ unreleasedHidden: true,
171
171
  },
172
- equilibra: {
172
+ jumbao: {
173
173
  inherit: true,
174
- baseStats: {hp: 102, atk: 50, def: 96, spa: 133, spd: 118, spe: 60},
175
- abilities: {0: "Levitate", 1: "Bulletproof", H: "Justified"},
174
+ unreleasedHidden: true,
176
175
  },
177
176
  };
package/data/pokedex.ts CHANGED
@@ -17065,9 +17065,9 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
17065
17065
  name: "Mumbao",
17066
17066
  types: ["Grass", "Fairy"],
17067
17067
  baseStats: {hp: 55, atk: 30, def: 64, spa: 87, spd: 73, spe: 66},
17068
- abilities: {0: "Solar Power", 1: "Trace", H: "Overcoat"},
17068
+ abilities: {0: "Trace", 1: "Overcoat", H: "Solar Power"},
17069
17069
  heightm: 1,
17070
- weightkg: 250,
17070
+ weightkg: 83,
17071
17071
  color: "Brown",
17072
17072
  evos: ["Jumbao"],
17073
17073
  eggGroups: ["Grass"],
@@ -17078,9 +17078,9 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
17078
17078
  name: "Jumbao",
17079
17079
  types: ["Grass", "Fairy"],
17080
17080
  baseStats: {hp: 92, atk: 63, def: 97, spa: 124, spd: 104, spe: 96},
17081
- abilities: {0: "Drought", 1: "Trace", H: "Overcoat"},
17081
+ abilities: {0: "Trace", 1: "Overcoat", H: "Drought"},
17082
17082
  heightm: 2.4,
17083
- weightkg: 600,
17083
+ weightkg: 200,
17084
17084
  color: "Brown",
17085
17085
  prevo: "Mumbao",
17086
17086
  evoType: "levelFriendship",
@@ -17229,7 +17229,7 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
17229
17229
  types: ["Steel", "Ground"],
17230
17230
  gender: "N",
17231
17231
  baseStats: {hp: 72, atk: 70, def: 56, spa: 83, spd: 68, spe: 30},
17232
- abilities: {0: "Levitate", 1: "Stalwart", H: "Justified"},
17232
+ abilities: {0: "Levitate", 1: "Bulletproof", H: "Justified"},
17233
17233
  heightm: 0.4,
17234
17234
  weightkg: 36.5,
17235
17235
  color: "Brown",
@@ -17242,8 +17242,8 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
17242
17242
  name: "Equilibra",
17243
17243
  types: ["Steel", "Ground"],
17244
17244
  gender: "N",
17245
- baseStats: {hp: 102, atk: 50, def: 96, spa: 121, spd: 118, spe: 60},
17246
- abilities: {0: "Levitate", 1: "Stalwart", H: "Justified"},
17245
+ baseStats: {hp: 102, atk: 50, def: 96, spa: 133, spd: 118, spe: 60},
17246
+ abilities: {0: "Levitate", 1: "Bulletproof", H: "Justified"},
17247
17247
  heightm: 0.8,
17248
17248
  weightkg: 51.3,
17249
17249
  color: "Brown",
package/data/rulesets.ts CHANGED
@@ -994,7 +994,7 @@ export const Rulesets: {[k: string]: FormatData} = {
994
994
  if (status.id === 'slp') {
995
995
  for (const pokemon of target.side.pokemon) {
996
996
  if (pokemon.hp && pokemon.status === 'slp') {
997
- this.add('-message', "Sleep Clause activated. (In Stadium, Sleep Clause activates if any of the opponent's Pokemon are asleep, even if self-inflicted from Rest)");
997
+ this.add('-message', "Sleep Clause activated. (In Nintendo formats, Sleep Clause activates if any of the opponent's Pokemon are asleep, even if self-inflicted from Rest)");
998
998
  return false;
999
999
  }
1000
1000
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pkmn/sim",
3
- "version": "0.5.25",
3
+ "version": "0.5.26",
4
4
  "description": "An automatically generated extraction of just the simulator portion of Pokémon Showdown",
5
5
  "homepage": "https://psim.us",
6
6
  "main": "build/sim/index.js",
@@ -733,9 +733,16 @@ export class TeamValidator {
733
733
  isFromRBYEncounter = true;
734
734
  }
735
735
  }
736
- if (!isFromRBYEncounter && ruleTable.has('obtainablemisc') && set.level < (species.evoLevel || 0)) {
736
+ if (!isFromRBYEncounter && ruleTable.has('obtainablemisc')) {
737
737
  // FIXME: Event pokemon given at a level under what it normally can be attained at gives a false positive
738
- problems.push(`${name} must be at least level ${species.evoLevel} to be evolved.`);
738
+ let evoSpecies = species;
739
+ while (evoSpecies.prevo) {
740
+ if (set.level < (evoSpecies.evoLevel || 0)) {
741
+ problems.push(`${name} must be at least level ${evoSpecies.evoLevel} to be evolved.`);
742
+ break;
743
+ }
744
+ evoSpecies = dex.species.get(evoSpecies.prevo);
745
+ }
739
746
  }
740
747
 
741
748
  if (ruleTable.has('obtainablemoves') && species.id === 'keldeo' && set.moves.includes('secretsword') &&