@pkmn/sim 0.5.3 → 0.5.4

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 (45) hide show
  1. package/build/config/formats.js +114 -63
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/aliases.js +2 -2
  4. package/build/data/aliases.js.map +1 -1
  5. package/build/data/formats-data.js +56 -56
  6. package/build/data/formats-data.js.map +1 -1
  7. package/build/data/mods/gen1/formats-data.js +190 -190
  8. package/build/data/mods/gen1/formats-data.js.map +1 -1
  9. package/build/data/mods/gen1/moves.js +1 -2
  10. package/build/data/mods/gen1/moves.js.map +1 -1
  11. package/build/data/mods/gen2/formats-data.js +1 -1
  12. package/build/data/mods/gen2/formats-data.js.map +1 -1
  13. package/build/data/mods/gen3/formats-data.js +12 -12
  14. package/build/data/mods/gen3/formats-data.js.map +1 -1
  15. package/build/data/mods/gen4/moves.js +22 -0
  16. package/build/data/mods/gen4/moves.js.map +1 -1
  17. package/build/data/mods/gen5/formats-data.js +15 -15
  18. package/build/data/mods/gen5/formats-data.js.map +1 -1
  19. package/build/data/mods/gen6/formats-data.js +1 -1
  20. package/build/data/mods/gen7/formats-data.js +1 -1
  21. package/build/data/mods/gen7/formats-data.js.map +1 -1
  22. package/build/data/mods/gen7/moves.js +154 -0
  23. package/build/data/mods/gen7/moves.js.map +1 -1
  24. package/build/data/moves.js +38 -7
  25. package/build/data/moves.js.map +1 -1
  26. package/build/data/rulesets.js +9 -0
  27. package/build/data/rulesets.js.map +1 -1
  28. package/build/data/tags.js +3 -2
  29. package/build/data/tags.js.map +1 -1
  30. package/config/formats.ts +118 -66
  31. package/data/aliases.ts +2 -2
  32. package/data/formats-data.ts +56 -56
  33. package/data/mods/gen1/formats-data.ts +190 -190
  34. package/data/mods/gen1/moves.ts +1 -2
  35. package/data/mods/gen2/formats-data.ts +1 -1
  36. package/data/mods/gen3/formats-data.ts +12 -12
  37. package/data/mods/gen4/moves.ts +21 -0
  38. package/data/mods/gen5/formats-data.ts +15 -15
  39. package/data/mods/gen6/formats-data.ts +1 -1
  40. package/data/mods/gen7/formats-data.ts +1 -1
  41. package/data/mods/gen7/moves.ts +150 -0
  42. package/data/moves.ts +37 -7
  43. package/data/rulesets.ts +9 -0
  44. package/data/tags.ts +3 -2
  45. package/package.json +1 -1
@@ -407,8 +407,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
407
407
  pokemon.clearBoosts();
408
408
 
409
409
  if (pokemon !== source) {
410
- // Clears the status from the opponent
411
- pokemon.setStatus('');
410
+ pokemon.cureStatus(true);
412
411
  }
413
412
  if (pokemon.status === 'tox') {
414
413
  pokemon.setStatus('psn');
@@ -885,7 +885,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
885
885
  tier: "Uber",
886
886
  },
887
887
  hooh: {
888
- randomBattleMoves: ["curse", "earthquake", "hiddenpowerflying", "sacredfire", "recover", "thunder", "thunderbolt"],
888
+ randomBattleMoves: ["curse", "earthquake", "hiddenpowerflying", "recover", "sacredfire", "thunder", "thunderbolt"],
889
889
  tier: "Uber",
890
890
  },
891
891
  celebi: {
@@ -215,7 +215,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
215
215
  tier: "LC",
216
216
  },
217
217
  arcanine: {
218
- randomBattleMoves: ["fireblast", "flamethrower", "extremespeed", "hiddenpowergrass", "rest", "sleeptalk", "toxic"],
218
+ randomBattleMoves: ["extremespeed", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "sleeptalk", "toxic"],
219
219
  tier: "UUBL",
220
220
  },
221
221
  poliwag: {
@@ -294,14 +294,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
294
294
  tier: "UUBL",
295
295
  },
296
296
  slowking: {
297
- randomBattleMoves: ["calmmind", "flamethrower", "icebeam", "psychic", "surf", "rest", "sleeptalk", "thunderwave"],
297
+ randomBattleMoves: ["calmmind", "flamethrower", "icebeam", "psychic", "rest", "sleeptalk", "surf", "thunderwave"],
298
298
  tier: "UU",
299
299
  },
300
300
  magnemite: {
301
301
  tier: "LC",
302
302
  },
303
303
  magneton: {
304
- randomBattleMoves: ["hiddenpowergrass", "hiddenpowerice", "rest", "sleeptalk", "substitute", "thunderbolt", "thunderwave", "toxic"],
304
+ randomBattleMoves: ["hiddenpowergrass", "hiddenpowerice", "rest", "sleeptalk", "thunderbolt", "toxic"],
305
305
  tier: "OU",
306
306
  },
307
307
  farfetchd: {
@@ -326,14 +326,14 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
326
326
  tier: "LC",
327
327
  },
328
328
  muk: {
329
- randomBattleMoves: ["curse", "brickbreak", "explosion", "fireblast", "hiddenpowerghost", "rest", "sludgebomb"],
329
+ randomBattleMoves: ["brickbreak", "curse", "explosion", "fireblast", "hiddenpowerghost", "rest", "sludgebomb"],
330
330
  tier: "UU",
331
331
  },
332
332
  shellder: {
333
333
  tier: "LC",
334
334
  },
335
335
  cloyster: {
336
- randomBattleMoves: ["explosion", "icebeam", "surf", "rapidspin", "spikes", "toxic"],
336
+ randomBattleMoves: ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"],
337
337
  tier: "OU",
338
338
  },
339
339
  gastly: {
@@ -565,7 +565,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
565
565
  tier: "OU",
566
566
  },
567
567
  snorlax: {
568
- randomBattleMoves: ["bodyslam", "curse", "earthquake", "return", "rest", "selfdestruct", "shadowball", "sleeptalk"],
568
+ randomBattleMoves: ["bodyslam", "curse", "earthquake", "rest", "return", "selfdestruct", "shadowball", "sleeptalk"],
569
569
  tier: "OU",
570
570
  },
571
571
  articuno: {
@@ -764,7 +764,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
764
764
  tier: "OU",
765
765
  },
766
766
  dunsparce: {
767
- randomBattleMoves: ["bodyslam", "curse", "headbutt", "rockslide", "rest", "shadowball", "thunderwave"],
767
+ randomBattleMoves: ["bodyslam", "curse", "headbutt", "rest", "rockslide", "shadowball", "thunderwave"],
768
768
  tier: "NU",
769
769
  },
770
770
  gligar: {
@@ -831,7 +831,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
831
831
  tier: "NU",
832
832
  },
833
833
  mantine: {
834
- randomBattleMoves: ["haze", "hiddenpowergrass", "icebeam", "surf", "raindance", "rest", "sleeptalk", "toxic"],
834
+ randomBattleMoves: ["haze", "hiddenpowergrass", "icebeam", "raindance", "rest", "sleeptalk", "surf", "toxic"],
835
835
  tier: "UU",
836
836
  },
837
837
  skarmory: {
@@ -891,7 +891,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
891
891
  tier: "Uber",
892
892
  },
893
893
  hooh: {
894
- randomBattleMoves: ["calmmind", "earthquake", "sacredfire", "thunderbolt", "recover", "substitute", "toxic"],
894
+ randomBattleMoves: ["calmmind", "earthquake", "recover", "sacredfire", "substitute", "thunderbolt", "toxic"],
895
895
  tier: "Uber",
896
896
  },
897
897
  celebi: {
@@ -1053,7 +1053,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1053
1053
  tier: "LC",
1054
1054
  },
1055
1055
  hariyama: {
1056
- randomBattleMoves: ["bulkup", "crosschop", "fakeout", "focuspunch", "hiddenpowerghost", "rockslide", "substitute", "rest", "sleeptalk"],
1056
+ randomBattleMoves: ["bulkup", "crosschop", "fakeout", "hiddenpowerghost", "rest", "rockslide", "sleeptalk"],
1057
1057
  tier: "UUBL",
1058
1058
  },
1059
1059
  nosepass: {
@@ -1206,7 +1206,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1206
1206
  tier: "LC",
1207
1207
  },
1208
1208
  whiscash: {
1209
- randomBattleMoves: ["earthquake", "hiddenpowerbug", "icebeam", "rockslide", "rest", "sleeptalk", "spark", "surf", "toxic"],
1209
+ randomBattleMoves: ["earthquake", "hiddenpowerbug", "icebeam", "rest", "rockslide", "sleeptalk", "spark", "surf", "toxic"],
1210
1210
  tier: "NU",
1211
1211
  },
1212
1212
  corphish: {
@@ -1241,7 +1241,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1241
1241
  tier: "LC",
1242
1242
  },
1243
1243
  milotic: {
1244
- randomBattleMoves: ["icebeam", "mirrorcoat", "recover", "rest", "sleeptalk", "surf", "toxic"],
1244
+ randomBattleMoves: ["icebeam", "mirrorcoat", "recover", "surf", "toxic"],
1245
1245
  tier: "OU",
1246
1246
  },
1247
1247
  castform: {
@@ -1433,6 +1433,27 @@ export const Moves: {[k: string]: ModdedMoveData} = {
1433
1433
  return !pokemon.volatiles['choicelock'] && !pokemon.volatiles['encore'];
1434
1434
  },
1435
1435
  },
1436
+ snatch: {
1437
+ inherit: true,
1438
+ condition: {
1439
+ duration: 1,
1440
+ onStart(pokemon) {
1441
+ this.add('-singleturn', pokemon, 'Snatch');
1442
+ },
1443
+ onAnyPrepareHitPriority: -1,
1444
+ onAnyPrepareHit(source, target, move) {
1445
+ const snatchUser = this.effectState.source;
1446
+ if (snatchUser.isSkyDropped()) return;
1447
+ if (!move || move.isZ || move.isMax || !move.flags['snatch']) {
1448
+ return;
1449
+ }
1450
+ snatchUser.removeVolatile('snatch');
1451
+ this.add('-activate', snatchUser, 'move: Snatch', '[of] ' + source);
1452
+ this.actions.useMove(move.id, snatchUser);
1453
+ return null;
1454
+ },
1455
+ },
1456
+ },
1436
1457
  spikes: {
1437
1458
  inherit: true,
1438
1459
  flags: {},
@@ -983,7 +983,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
983
983
  doublesTier: "DUU",
984
984
  },
985
985
  heracross: {
986
- randomBattleMoves: ["closecombat", "facade", "earthquake", "megahorn", "stoneedge"],
986
+ randomBattleMoves: ["closecombat", "earthquake", "facade", "megahorn", "stoneedge"],
987
987
  tier: "UU",
988
988
  doublesTier: "DUU",
989
989
  },
@@ -1363,12 +1363,12 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1363
1363
  doublesTier: "DUU",
1364
1364
  },
1365
1365
  plusle: {
1366
- randomBattleMoves: ["batonpass", "hiddenpowerice", "nastyplot", "thunderbolt", "substitute"],
1366
+ randomBattleMoves: ["batonpass", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
1367
1367
  tier: "(NU)",
1368
1368
  doublesTier: "DUU",
1369
1369
  },
1370
1370
  minun: {
1371
- randomBattleMoves: ["batonpass", "encore", "nastyplot", "thunderbolt", "substitute"],
1371
+ randomBattleMoves: ["batonpass", "encore", "nastyplot", "substitute", "thunderbolt"],
1372
1372
  tier: "(NU)",
1373
1373
  doublesTier: "DUU",
1374
1374
  },
@@ -1572,7 +1572,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1572
1572
  doublesTier: "NFE",
1573
1573
  },
1574
1574
  dusknoir: {
1575
- randomBattleMoves: ["earthquake", "icepunch", "painsplit", "shadowsneak", "willowisp", "trick"],
1575
+ randomBattleMoves: ["earthquake", "icepunch", "painsplit", "shadowsneak", "trick", "willowisp"],
1576
1576
  tier: "RU",
1577
1577
  doublesTier: "DUU",
1578
1578
  },
@@ -1637,7 +1637,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1637
1637
  doublesTier: "DUU",
1638
1638
  },
1639
1639
  luvdisc: {
1640
- randomBattleMoves: ["icebeam", "protect", "surf", "toxic", "sweetkiss"],
1640
+ randomBattleMoves: ["icebeam", "protect", "surf", "sweetkiss", "toxic"],
1641
1641
  tier: "(NU)",
1642
1642
  doublesTier: "DUU",
1643
1643
  },
@@ -1670,12 +1670,12 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1670
1670
  doublesTier: "DUU",
1671
1671
  },
1672
1672
  regice: {
1673
- randomBattleMoves: ["focusblast", "icebeam", "rockpolish", "rest", "sleeptalk", "thunderbolt"],
1673
+ randomBattleMoves: ["focusblast", "icebeam", "rest", "rockpolish", "sleeptalk", "thunderbolt"],
1674
1674
  tier: "NU",
1675
1675
  doublesTier: "DUU",
1676
1676
  },
1677
1677
  registeel: {
1678
- randomBattleMoves: ["ironhead", "curse", "protect", "rest", "sleeptalk", "stealthrock", "toxic"],
1678
+ randomBattleMoves: ["curse", "ironhead", "protect", "rest", "sleeptalk", "stealthrock", "toxic"],
1679
1679
  tier: "UU",
1680
1680
  doublesTier: "DUU",
1681
1681
  },
@@ -1715,7 +1715,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1715
1715
  doublesTier: "DUU",
1716
1716
  },
1717
1717
  deoxysattack: {
1718
- randomBattleMoves: ["extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "superpower", "stealthrock"],
1718
+ randomBattleMoves: ["extremespeed", "hiddenpowerfire", "icebeam", "psychoboost", "stealthrock", "superpower"],
1719
1719
  tier: "Uber",
1720
1720
  doublesTier: "DUU",
1721
1721
  },
@@ -1994,7 +1994,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
1994
1994
  doublesTier: "DOU",
1995
1995
  },
1996
1996
  rotom: {
1997
- randomBattleMoves: ["hiddenpowerice", "shadowball", "substitute", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
1997
+ randomBattleMoves: ["hiddenpowerice", "painsplit", "shadowball", "substitute", "thunderbolt", "trick", "voltswitch", "willowisp"],
1998
1998
  tier: "RU",
1999
1999
  doublesTier: "DUU",
2000
2000
  },
@@ -2059,7 +2059,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2059
2059
  doublesTier: "DUU",
2060
2060
  },
2061
2061
  giratina: {
2062
- randomBattleMoves: ["calmmind", "dragontail", "dragonpulse", "rest", "sleeptalk", "willowisp"],
2062
+ randomBattleMoves: ["calmmind", "dragonpulse", "dragontail", "rest", "sleeptalk", "willowisp"],
2063
2063
  tier: "Uber",
2064
2064
  doublesTier: "DUber",
2065
2065
  },
@@ -2089,7 +2089,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2089
2089
  doublesTier: "DUU",
2090
2090
  },
2091
2091
  shaymin: {
2092
- randomBattleMoves: ["earthpower", "hiddenpowerfire", "leechseed", "psychic", "seedflare", "rest", "substitute"],
2092
+ randomBattleMoves: ["earthpower", "hiddenpowerfire", "leechseed", "psychic", "rest", "seedflare", "substitute"],
2093
2093
  tier: "UU",
2094
2094
  doublesTier: "DUU",
2095
2095
  },
@@ -2143,7 +2143,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2143
2143
  randomBattleMoves: ["calmmind", "darkpulse", "judgment", "recover", "willowisp"],
2144
2144
  },
2145
2145
  arceusrock: {
2146
- randomBattleMoves: ["earthquake", "stoneedge", "swordsdance", "recover"],
2146
+ randomBattleMoves: ["earthquake", "recover", "stoneedge", "swordsdance"],
2147
2147
  },
2148
2148
  arceussteel: {
2149
2149
  randomBattleMoves: ["calmmind", "judgment", "recover", "thunderbolt", "willowisp"],
@@ -2655,7 +2655,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2655
2655
  tier: "LC",
2656
2656
  },
2657
2657
  mienshao: {
2658
- randomBattleMoves: ["batonpass", "highjumpkick", "stoneedge", "swordsdance", "substitute", "uturn"],
2658
+ randomBattleMoves: ["batonpass", "highjumpkick", "stoneedge", "substitute", "swordsdance", "uturn"],
2659
2659
  tier: "UU",
2660
2660
  doublesTier: "DUU",
2661
2661
  },
@@ -2741,7 +2741,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2741
2741
  doublesTier: "DOU",
2742
2742
  },
2743
2743
  virizion: {
2744
- randomBattleMoves: ["calmmind", "closecombat", "focusblast", "gigadrain", "leafblade", "hiddenpowerice", "stoneedge", "swordsdance"],
2744
+ randomBattleMoves: ["calmmind", "closecombat", "focusblast", "gigadrain", "hiddenpowerice", "leafblade", "stoneedge", "swordsdance"],
2745
2745
  tier: "UU",
2746
2746
  doublesTier: "DUU",
2747
2747
  },
@@ -2781,7 +2781,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2781
2781
  doublesTier: "DUU",
2782
2782
  },
2783
2783
  landorustherian: {
2784
- randomBattleMoves: ["earthquake", "hiddenpowerice", "rockpolish", "stealthrock", "stoneedge", "swordsdance", "superpower", "uturn"],
2784
+ randomBattleMoves: ["earthquake", "hiddenpowerice", "rockpolish", "stealthrock", "stoneedge", "superpower", "swordsdance", "uturn"],
2785
2785
  tier: "OU",
2786
2786
  doublesTier: "DOU",
2787
2787
  },
@@ -664,7 +664,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
664
664
  doublesTier: "(DUU)",
665
665
  },
666
666
  kangaskhanmega: {
667
- randomBattleMoves: ["crunch", "earthquake", "fakeout", "poweruppunch", "return", "suckerpunch", "seismictoss"],
667
+ randomBattleMoves: ["crunch", "earthquake", "fakeout", "poweruppunch", "return", "seismictoss", "suckerpunch"],
668
668
  randomDoubleBattleMoves: ["crunch", "doubleedge", "drainpunch", "earthquake", "fakeout", "poweruppunch", "protect", "return", "suckerpunch"],
669
669
  tier: "Uber",
670
670
  doublesTier: "DOU",
@@ -2300,7 +2300,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
2300
2300
  doublesTier: "DUber",
2301
2301
  },
2302
2302
  deoxys: {
2303
- randomBattleMoves: ["extremespeed", "icebeam", "firepunch", "knockoff", "psychoboost", "stealthrock", "superpower"],
2303
+ randomBattleMoves: ["extremespeed", "firepunch", "icebeam", "knockoff", "psychoboost", "stealthrock", "superpower"],
2304
2304
  randomDoubleBattleMoves: ["extremespeed", "firepunch", "icebeam", "knockoff", "protect", "psychoboost", "superpower"],
2305
2305
  tier: "Uber",
2306
2306
  doublesTier: "(DUU)",
@@ -240,6 +240,25 @@ export const Moves: {[k: string]: ModdedMoveData} = {
240
240
  inherit: true,
241
241
  isNonstandard: null,
242
242
  },
243
+ floralhealing: {
244
+ inherit: true,
245
+ onHit(target, source) {
246
+ let success = false;
247
+ if (this.field.isTerrain('grassyterrain')) {
248
+ success = !!this.heal(this.modify(target.baseMaxhp, 0.667));
249
+ } else {
250
+ success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5));
251
+ }
252
+ if (success && !target.isAlly(source)) {
253
+ target.staleness = 'external';
254
+ }
255
+ if (!success) {
256
+ this.add('-fail', target, 'heal');
257
+ return null;
258
+ }
259
+ return success;
260
+ },
261
+ },
243
262
  foresight: {
244
263
  inherit: true,
245
264
  isNonstandard: null,
@@ -359,6 +378,25 @@ export const Moves: {[k: string]: ModdedMoveData} = {
359
378
  inherit: true,
360
379
  isNonstandard: null,
361
380
  },
381
+ healpulse: {
382
+ inherit: true,
383
+ onHit(target, source) {
384
+ let success = false;
385
+ if (source.hasAbility('megalauncher')) {
386
+ success = !!this.heal(this.modify(target.baseMaxhp, 0.75));
387
+ } else {
388
+ success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5));
389
+ }
390
+ if (success && !target.isAlly(source)) {
391
+ target.staleness = 'external';
392
+ }
393
+ if (!success) {
394
+ this.add('-fail', target, 'heal');
395
+ return null;
396
+ }
397
+ return success;
398
+ },
399
+ },
362
400
  heartstamp: {
363
401
  inherit: true,
364
402
  isNonstandard: null,
@@ -608,6 +646,54 @@ export const Moves: {[k: string]: ModdedMoveData} = {
608
646
  inherit: true,
609
647
  isNonstandard: null,
610
648
  },
649
+ moonlight: {
650
+ inherit: true,
651
+ onHit(pokemon) {
652
+ let factor = 0.5;
653
+ switch (pokemon.effectiveWeather()) {
654
+ case 'sunnyday':
655
+ case 'desolateland':
656
+ factor = 0.667;
657
+ break;
658
+ case 'raindance':
659
+ case 'primordialsea':
660
+ case 'sandstorm':
661
+ case 'hail':
662
+ factor = 0.25;
663
+ break;
664
+ }
665
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
666
+ if (!success) {
667
+ this.add('-fail', pokemon, 'heal');
668
+ return null;
669
+ }
670
+ return success;
671
+ },
672
+ },
673
+ morningsun: {
674
+ inherit: true,
675
+ onHit(pokemon) {
676
+ let factor = 0.5;
677
+ switch (pokemon.effectiveWeather()) {
678
+ case 'sunnyday':
679
+ case 'desolateland':
680
+ factor = 0.667;
681
+ break;
682
+ case 'raindance':
683
+ case 'primordialsea':
684
+ case 'sandstorm':
685
+ case 'hail':
686
+ factor = 0.25;
687
+ break;
688
+ }
689
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
690
+ if (!success) {
691
+ this.add('-fail', pokemon, 'heal');
692
+ return null;
693
+ }
694
+ return success;
695
+ },
696
+ },
611
697
  mudbomb: {
612
698
  inherit: true,
613
699
  isNonstandard: null,
@@ -651,6 +737,14 @@ export const Moves: {[k: string]: ModdedMoveData} = {
651
737
  pollenpuff: {
652
738
  inherit: true,
653
739
  flags: {bullet: 1, protect: 1, mirror: 1},
740
+ onHit(target, source) {
741
+ if (source.isAlly(target)) {
742
+ if (!this.heal(Math.floor(target.baseMaxhp * 0.5))) {
743
+ this.add('-immune', target);
744
+ return null;
745
+ }
746
+ }
747
+ },
654
748
  },
655
749
  powder: {
656
750
  inherit: true,
@@ -722,6 +816,13 @@ export const Moves: {[k: string]: ModdedMoveData} = {
722
816
  inherit: true,
723
817
  isNonstandard: null,
724
818
  },
819
+ purify: {
820
+ inherit: true,
821
+ onHit(target, source) {
822
+ if (!target.cureStatus()) return false;
823
+ this.heal(Math.ceil(source.maxhp * 0.5), source);
824
+ },
825
+ },
725
826
  pursuit: {
726
827
  inherit: true,
727
828
  isNonstandard: null,
@@ -815,6 +916,21 @@ export const Moves: {[k: string]: ModdedMoveData} = {
815
916
  inherit: true,
816
917
  isNonstandard: null,
817
918
  },
919
+ shoreup: {
920
+ inherit: true,
921
+ onHit(pokemon) {
922
+ let factor = 0.5;
923
+ if (this.field.isWeather('sandstorm')) {
924
+ factor = 0.667;
925
+ }
926
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
927
+ if (!success) {
928
+ this.add('-fail', pokemon, 'heal');
929
+ return null;
930
+ }
931
+ return success;
932
+ },
933
+ },
818
934
  signalbeam: {
819
935
  inherit: true,
820
936
  isNonstandard: null,
@@ -898,6 +1014,16 @@ export const Moves: {[k: string]: ModdedMoveData} = {
898
1014
  inherit: true,
899
1015
  isNonstandard: null,
900
1016
  },
1017
+ swallow: {
1018
+ inherit: true,
1019
+ onHit(pokemon) {
1020
+ const healAmount = [0.25, 0.5, 1];
1021
+ const success = !!this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)]));
1022
+ if (!success) this.add('-fail', pokemon, 'heal');
1023
+ pokemon.removeVolatile('stockpile');
1024
+ return success || null;
1025
+ },
1026
+ },
901
1027
  switcheroo: {
902
1028
  inherit: true,
903
1029
  onHit(target, source, move) {
@@ -935,6 +1061,30 @@ export const Moves: {[k: string]: ModdedMoveData} = {
935
1061
  inherit: true,
936
1062
  isNonstandard: null,
937
1063
  },
1064
+ synthesis: {
1065
+ inherit: true,
1066
+ onHit(pokemon) {
1067
+ let factor = 0.5;
1068
+ switch (pokemon.effectiveWeather()) {
1069
+ case 'sunnyday':
1070
+ case 'desolateland':
1071
+ factor = 0.667;
1072
+ break;
1073
+ case 'raindance':
1074
+ case 'primordialsea':
1075
+ case 'sandstorm':
1076
+ case 'hail':
1077
+ factor = 0.25;
1078
+ break;
1079
+ }
1080
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
1081
+ if (!success) {
1082
+ this.add('-fail', pokemon, 'heal');
1083
+ return null;
1084
+ }
1085
+ return success;
1086
+ },
1087
+ },
938
1088
  tailglow: {
939
1089
  inherit: true,
940
1090
  isNonstandard: null,
package/data/moves.ts CHANGED
@@ -5320,6 +5320,10 @@ export const Moves: {[moveid: string]: MoveData} = {
5320
5320
  if (success && !target.isAlly(source)) {
5321
5321
  target.staleness = 'external';
5322
5322
  }
5323
+ if (!success) {
5324
+ this.add('-fail', target, 'heal');
5325
+ return this.NOT_FAIL;
5326
+ }
5323
5327
  return success;
5324
5328
  },
5325
5329
  secondary: null,
@@ -7854,6 +7858,10 @@ export const Moves: {[moveid: string]: MoveData} = {
7854
7858
  if (success && !target.isAlly(source)) {
7855
7859
  target.staleness = 'external';
7856
7860
  }
7861
+ if (!success) {
7862
+ this.add('-fail', target, 'heal');
7863
+ return this.NOT_FAIL;
7864
+ }
7857
7865
  return success;
7858
7866
  },
7859
7867
  secondary: null,
@@ -11514,7 +11522,12 @@ export const Moves: {[moveid: string]: MoveData} = {
11514
11522
  factor = 0.25;
11515
11523
  break;
11516
11524
  }
11517
- return !!this.heal(this.modify(pokemon.maxhp, factor));
11525
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
11526
+ if (!success) {
11527
+ this.add('-fail', pokemon, 'heal');
11528
+ return this.NOT_FAIL;
11529
+ }
11530
+ return success;
11518
11531
  },
11519
11532
  secondary: null,
11520
11533
  target: "self",
@@ -11545,7 +11558,12 @@ export const Moves: {[moveid: string]: MoveData} = {
11545
11558
  factor = 0.25;
11546
11559
  break;
11547
11560
  }
11548
- return !!this.heal(this.modify(pokemon.maxhp, factor));
11561
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
11562
+ if (!success) {
11563
+ this.add('-fail', pokemon, 'heal');
11564
+ return this.NOT_FAIL;
11565
+ }
11566
+ return success;
11549
11567
  },
11550
11568
  secondary: null,
11551
11569
  target: "self",
@@ -12734,6 +12752,7 @@ export const Moves: {[moveid: string]: MoveData} = {
12734
12752
  if (source.isAlly(target)) {
12735
12753
  if (!this.heal(Math.floor(target.baseMaxhp * 0.5))) {
12736
12754
  this.add('-immune', target);
12755
+ return this.NOT_FAIL;
12737
12756
  }
12738
12757
  }
12739
12758
  },
@@ -13396,7 +13415,7 @@ export const Moves: {[moveid: string]: MoveData} = {
13396
13415
  priority: 0,
13397
13416
  flags: {protect: 1, reflectable: 1, heal: 1},
13398
13417
  onHit(target, source) {
13399
- if (!target.cureStatus()) return false;
13418
+ if (!target.cureStatus()) return this.NOT_FAIL;
13400
13419
  this.heal(Math.ceil(source.maxhp * 0.5), source);
13401
13420
  },
13402
13421
  secondary: null,
@@ -15255,7 +15274,12 @@ export const Moves: {[moveid: string]: MoveData} = {
15255
15274
  if (this.field.isWeather('sandstorm')) {
15256
15275
  factor = 0.667;
15257
15276
  }
15258
- return !!this.heal(this.modify(pokemon.maxhp, factor));
15277
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
15278
+ if (!success) {
15279
+ this.add('-fail', pokemon, 'heal');
15280
+ return this.NOT_FAIL;
15281
+ }
15282
+ return success;
15259
15283
  },
15260
15284
  secondary: null,
15261
15285
  target: "self",
@@ -17385,9 +17409,10 @@ export const Moves: {[moveid: string]: MoveData} = {
17385
17409
  },
17386
17410
  onHit(pokemon) {
17387
17411
  const healAmount = [0.25, 0.5, 1];
17388
- const healedBy = this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)]));
17412
+ const success = !!this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)]));
17413
+ if (!success) this.add('-fail', pokemon, 'heal');
17389
17414
  pokemon.removeVolatile('stockpile');
17390
- return !!healedBy;
17415
+ return success || this.NOT_FAIL;
17391
17416
  },
17392
17417
  secondary: null,
17393
17418
  target: "self",
@@ -17550,7 +17575,12 @@ export const Moves: {[moveid: string]: MoveData} = {
17550
17575
  factor = 0.25;
17551
17576
  break;
17552
17577
  }
17553
- return !!this.heal(this.modify(pokemon.maxhp, factor));
17578
+ const success = !!this.heal(this.modify(pokemon.maxhp, factor));
17579
+ if (!success) {
17580
+ this.add('-fail', pokemon, 'heal');
17581
+ return this.NOT_FAIL;
17582
+ }
17583
+ return success;
17554
17584
  },
17555
17585
  secondary: null,
17556
17586
  target: "self",
package/data/rulesets.ts CHANGED
@@ -791,6 +791,15 @@ export const Rulesets: {[k: string]: FormatData} = {
791
791
  ];
792
792
  },
793
793
  },
794
+ onebatonpassclause: {
795
+ effectType: 'ValidatorRule',
796
+ name: 'One Baton Pass Clause',
797
+ desc: "Stops teams from having more than one Pokémon with Baton Pass",
798
+ banlist: ["Baton Pass > 1"],
799
+ onBegin() {
800
+ this.add('rule', 'One Baton Pass Clause: Limit one Baton Passer');
801
+ },
802
+ },
794
803
  oneboostpasserclause: {
795
804
  effectType: 'ValidatorRule',
796
805
  name: 'One Boost Passer Clause',
package/data/tags.ts CHANGED
@@ -196,8 +196,9 @@ export const Tags: {[id: string]: TagData} = {
196
196
  name: "ND UUBL",
197
197
  speciesFilter: species => [
198
198
  'Aerodactyl-Mega', 'Azumarill', 'Blacephalon', 'Diancie-Mega', 'Gallade-Mega', 'Gardevoir-Mega', 'Gengar', 'Gyarados', 'Gyarados-Mega',
199
- 'Hawlucha', 'Heracross-Mega', 'Hoopa-Unbound', 'Hydreigon', 'Jirachi', 'Latias', 'Latias-Mega', 'Latios', 'Latios-Mega', 'Manaphy', 'Mew',
200
- 'Pinsir-Mega', 'Sableye-Mega', 'Slowbro-Mega', 'Slowking-Galar', 'Thundurus', 'Thundurus-Therian', 'Venusaur-Mega', 'Xurkitree', 'Zapdos-Galar',
199
+ 'Hawlucha', 'Heracross-Mega', 'Hoopa-Unbound', 'Hydreigon', 'Jirachi', 'Latias', 'Latias-Mega', 'Latios', 'Latios-Mega', 'Manaphy',
200
+ 'Medicham-Mega', 'Mew', 'Pinsir-Mega', 'Sableye-Mega', 'Slowbro-Mega', 'Slowking-Galar', 'Thundurus', 'Thundurus-Therian', 'Venusaur-Mega',
201
+ 'Xurkitree', 'Zapdos-Galar',
201
202
  ].includes(species.name),
202
203
  },
203
204
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pkmn/sim",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
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",