@pkmn/sim 0.5.12 → 0.5.15

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 (109) hide show
  1. package/build/config/formats.js +163 -149
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/abilities.js +2 -2
  4. package/build/data/abilities.js.map +1 -1
  5. package/build/data/aliases.js +2 -2
  6. package/build/data/aliases.js.map +1 -1
  7. package/build/data/conditions.js +4 -1
  8. package/build/data/conditions.js.map +1 -1
  9. package/build/data/formats-data.js +2 -2
  10. package/build/data/formats-data.js.map +1 -1
  11. package/build/data/items.js +4 -2
  12. package/build/data/items.js.map +1 -1
  13. package/build/data/learnsets.js +5 -4
  14. package/build/data/learnsets.js.map +1 -1
  15. package/build/data/mods/gen1/formats-data.js +38 -36
  16. package/build/data/mods/gen1/formats-data.js.map +1 -1
  17. package/build/data/mods/gen1/scripts.js +1 -1
  18. package/build/data/mods/gen1/scripts.js.map +1 -1
  19. package/build/data/mods/gen2/items.js +28 -0
  20. package/build/data/mods/gen2/items.js.map +1 -1
  21. package/build/data/mods/gen2/moves.js +2 -2
  22. package/build/data/mods/gen2/moves.js.map +1 -1
  23. package/build/data/mods/gen3/items.js +28 -0
  24. package/build/data/mods/gen3/items.js.map +1 -1
  25. package/build/data/mods/gen4/abilities.js +20 -0
  26. package/build/data/mods/gen4/abilities.js.map +1 -1
  27. package/build/data/mods/gen4/items.js +28 -0
  28. package/build/data/mods/gen4/items.js.map +1 -1
  29. package/build/data/mods/gen4/moves.js +14 -6
  30. package/build/data/mods/gen4/moves.js.map +1 -1
  31. package/build/data/mods/gen5/items.js +0 -4
  32. package/build/data/mods/gen5/items.js.map +1 -1
  33. package/build/data/mods/gen6/formats-data.js +3 -3
  34. package/build/data/mods/gen6/formats-data.js.map +1 -1
  35. package/build/data/mods/gen6/items.js +24 -0
  36. package/build/data/mods/gen6/items.js.map +1 -1
  37. package/build/data/mods/gen7/abilities.js +31 -0
  38. package/build/data/mods/gen7/abilities.js.map +1 -1
  39. package/build/data/mods/gen7/items.js +12 -0
  40. package/build/data/mods/gen7/items.js.map +1 -1
  41. package/build/data/mods/gen7/moves.js +14 -0
  42. package/build/data/mods/gen7/moves.js.map +1 -1
  43. package/build/data/moves.js +45 -19
  44. package/build/data/moves.js.map +1 -1
  45. package/build/data/rulesets.js +72 -1
  46. package/build/data/rulesets.js.map +1 -1
  47. package/build/data/tags.js +3 -3
  48. package/build/data/tags.js.map +1 -1
  49. package/build/data/text/moves.js +8 -8
  50. package/build/data/text/moves.js.map +1 -1
  51. package/build/sim/battle-queue.d.ts +2 -2
  52. package/build/sim/battle-queue.js +8 -0
  53. package/build/sim/battle-queue.js.map +1 -1
  54. package/build/sim/battle.js +42 -2
  55. package/build/sim/battle.js.map +1 -1
  56. package/build/sim/dex-conditions.d.ts +2 -2
  57. package/build/sim/dex-conditions.js +1 -0
  58. package/build/sim/dex-conditions.js.map +1 -1
  59. package/build/sim/dex-data.js +1 -0
  60. package/build/sim/dex-data.js.map +1 -1
  61. package/build/sim/dex-formats.js +1 -0
  62. package/build/sim/dex-formats.js.map +1 -1
  63. package/build/sim/dex-items.js +1 -0
  64. package/build/sim/dex-items.js.map +1 -1
  65. package/build/sim/dex-moves.d.ts +1 -0
  66. package/build/sim/dex-moves.js +1 -0
  67. package/build/sim/dex-moves.js.map +1 -1
  68. package/build/sim/dex-species.js +1 -0
  69. package/build/sim/dex-species.js.map +1 -1
  70. package/build/sim/pokemon.js +18 -5
  71. package/build/sim/pokemon.js.map +1 -1
  72. package/build/sim/team-validator.js +1 -1
  73. package/build/sim/team-validator.js.map +1 -1
  74. package/config/formats.ts +169 -154
  75. package/data/abilities.ts +2 -2
  76. package/data/aliases.ts +2 -2
  77. package/data/conditions.ts +4 -1
  78. package/data/formats-data.ts +2 -2
  79. package/data/items.ts +4 -2
  80. package/data/learnsets.ts +5 -4
  81. package/data/mods/gen1/formats-data.ts +38 -36
  82. package/data/mods/gen1/scripts.ts +1 -1
  83. package/data/mods/gen2/items.ts +28 -0
  84. package/data/mods/gen2/moves.ts +2 -2
  85. package/data/mods/gen3/items.ts +28 -0
  86. package/data/mods/gen4/abilities.ts +20 -0
  87. package/data/mods/gen4/items.ts +28 -0
  88. package/data/mods/gen4/moves.ts +14 -7
  89. package/data/mods/gen5/items.ts +0 -4
  90. package/data/mods/gen6/formats-data.ts +3 -3
  91. package/data/mods/gen6/items.ts +24 -0
  92. package/data/mods/gen7/abilities.ts +31 -0
  93. package/data/mods/gen7/items.ts +12 -0
  94. package/data/mods/gen7/moves.ts +14 -0
  95. package/data/moves.ts +45 -18
  96. package/data/rulesets.ts +71 -1
  97. package/data/tags.ts +3 -3
  98. package/data/text/moves.ts +8 -8
  99. package/package.json +3 -3
  100. package/sim/battle-queue.ts +10 -2
  101. package/sim/battle.ts +39 -2
  102. package/sim/dex-conditions.ts +7 -2
  103. package/sim/dex-data.ts +1 -0
  104. package/sim/dex-formats.ts +1 -0
  105. package/sim/dex-items.ts +1 -0
  106. package/sim/dex-moves.ts +2 -0
  107. package/sim/dex-species.ts +1 -0
  108. package/sim/pokemon.ts +19 -7
  109. package/sim/team-validator.ts +1 -1
package/data/items.ts CHANGED
@@ -752,6 +752,7 @@ export const Items: {[itemid: string]: ItemData} = {
752
752
  num: 16,
753
753
  gen: 4,
754
754
  isPokeball: true,
755
+ isNonstandard: "Unobtainable",
755
756
  },
756
757
  chestoberry: {
757
758
  name: "Chesto Berry",
@@ -2904,7 +2905,7 @@ export const Items: {[itemid: string]: ItemData} = {
2904
2905
  return this.chainModify([5324, 4096]);
2905
2906
  },
2906
2907
  onAfterMoveSecondarySelf(source, target, move) {
2907
- if (source && source !== target && move && move.category !== 'Status') {
2908
+ if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) {
2908
2909
  this.damage(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb'));
2909
2910
  }
2910
2911
  },
@@ -3773,6 +3774,7 @@ export const Items: {[itemid: string]: ItemData} = {
3773
3774
  num: 500,
3774
3775
  gen: 4,
3775
3776
  isPokeball: true,
3777
+ isNonstandard: "Unobtainable",
3776
3778
  },
3777
3779
  passhoberry: {
3778
3780
  name: "Passho Berry",
@@ -4877,7 +4879,7 @@ export const Items: {[itemid: string]: ItemData} = {
4877
4879
  },
4878
4880
  onAfterMoveSecondarySelfPriority: -1,
4879
4881
  onAfterMoveSecondarySelf(pokemon, target, move) {
4880
- if (move.totalDamage) {
4882
+ if (move.totalDamage && !pokemon.forceSwitchFlag) {
4881
4883
  this.heal(move.totalDamage / 8, pokemon);
4882
4884
  }
4883
4885
  },
package/data/learnsets.ts CHANGED
@@ -20480,20 +20480,20 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
20480
20480
  dualwingbeat: ["8T"],
20481
20481
  endure: ["8M", "8L60"],
20482
20482
  facade: ["8M"],
20483
- fierywrath: ["8L45", "8S0"],
20483
+ fierywrath: ["8L45", "8S0", "8S1"],
20484
20484
  fly: ["8M"],
20485
20485
  foulplay: ["8M"],
20486
20486
  gigaimpact: ["8M"],
20487
20487
  gust: ["8L1"],
20488
20488
  hex: ["8M"],
20489
- hurricane: ["8M", "8L55", "8S0"],
20489
+ hurricane: ["8M", "8L55", "8S0", "8S1"],
20490
20490
  hyperbeam: ["8M"],
20491
20491
  hypervoice: ["8M"],
20492
20492
  imprison: ["8M"],
20493
20493
  lashout: ["8T"],
20494
20494
  leer: ["8L1"],
20495
20495
  memento: ["8L65"],
20496
- nastyplot: ["8M", "8L50", "8S0"],
20496
+ nastyplot: ["8M", "8L50", "8S0", "8S1"],
20497
20497
  payback: ["8M", "8L5"],
20498
20498
  protect: ["8M"],
20499
20499
  rest: ["8M"],
@@ -20507,7 +20507,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
20507
20507
  snore: ["8M"],
20508
20508
  steelwing: ["8M"],
20509
20509
  substitute: ["8M"],
20510
- suckerpunch: ["8L30", "8S0"],
20510
+ suckerpunch: ["8L30", "8S0", "8S1"],
20511
20511
  swift: ["8M"],
20512
20512
  taunt: ["8M"],
20513
20513
  uturn: ["8M"],
@@ -20515,6 +20515,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
20515
20515
  },
20516
20516
  eventData: [
20517
20517
  {generation: 8, level: 70, moves: ["fierywrath", "hurricane", "suckerpunch", "nastyplot"]},
20518
+ {generation: 8, level: 70, shiny: true, moves: ["fierywrath", "hurricane", "suckerpunch", "nastyplot"], pokeball: "cherishball"},
20518
20519
  ],
20519
20520
  eventOnly: true,
20520
20521
  },
@@ -61,7 +61,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
61
61
  butterfree: {
62
62
  randomBattleMoves: ["psychic", "sleeppowder", "stunspore"],
63
63
  exclusiveMoves: ["megadrain", "psywave"],
64
- tier: "NU",
64
+ tier: "PU",
65
65
  },
66
66
  weedle: {
67
67
  randomBattleMoves: ["poisonsting", "stringshot"],
@@ -75,25 +75,27 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
75
75
  randomBattleMoves: ["megadrain", "swordsdance", "twineedle"],
76
76
  exclusiveMoves: ["doubleedge", "doubleedge", "hyperbeam"],
77
77
  comboMoves: ["agility", "hyperbeam", "swordsdance", "twineedle"],
78
- tier: "NU",
78
+ tier: "PU",
79
79
  },
80
80
  pidgey: {
81
81
  randomBattleMoves: ["agility", "doubleedge", "skyattack"],
82
- exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "substitute", "toxic"],
82
+ exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "substitute", "quickattack", "toxic"],
83
83
  tier: "LC",
84
84
  },
85
85
  pidgeotto: {
86
86
  randomBattleMoves: ["agility", "doubleedge", "skyattack"],
87
- exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "substitute", "toxic"],
87
+ exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "substitute", "quickattack", "toxic"],
88
88
  tier: "NFE",
89
89
  },
90
90
  pidgeot: {
91
91
  randomBattleMoves: ["agility", "doubleedge", "hyperbeam"],
92
- exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "skyattack", "skyattack", "substitute", "toxic"],
93
- tier: "NU",
92
+ exclusiveMoves: ["mimic", "mirrormove", "reflect", "sandattack", "skyattack", "skyattack", "substitute", "quickattack", "toxic"],
93
+ tier: "PU",
94
94
  },
95
95
  rattata: {
96
- randomBattleMoves: ["blizzard", "bodyslam", "thunderbolt"],
96
+ randomBattleMoves: ["blizzard", "bodyslam"],
97
+ // The two Thunderbolts are not a mistake, but specifically requested
98
+ exclusiveMoves: ["thunderbolt", "thunderbolt", "quickattack"],
97
99
  essentialMove: "superfang",
98
100
  tier: "LC",
99
101
  },
@@ -109,7 +111,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
109
111
  },
110
112
  fearow: {
111
113
  randomBattleMoves: ["agility", "doubleedge", "drillpeck", "hyperbeam"],
112
- tier: "NU",
114
+ tier: "PU",
113
115
  },
114
116
  ekans: {
115
117
  randomBattleMoves: ["bodyslam", "earthquake", "glare", "rockslide"],
@@ -118,7 +120,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
118
120
  arbok: {
119
121
  randomBattleMoves: ["earthquake", "glare", "hyperbeam"],
120
122
  exclusiveMoves: ["bodyslam", "rockslide"],
121
- tier: "NU",
123
+ tier: "PU",
122
124
  },
123
125
  pikachu: {
124
126
  randomBattleMoves: ["surf", "thunderwave"],
@@ -140,7 +142,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
140
142
  sandslash: {
141
143
  randomBattleMoves: ["bodyslam", "rockslide", "swordsdance"],
142
144
  essentialMove: "earthquake",
143
- tier: "NU",
145
+ tier: "PU",
144
146
  },
145
147
  nidoranf: {
146
148
  randomBattleMoves: ["blizzard", "bodyslam", "thunderbolt"],
@@ -155,7 +157,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
155
157
  nidoqueen: {
156
158
  randomBattleMoves: ["blizzard", "bodyslam", "thunderbolt"],
157
159
  essentialMove: "earthquake",
158
- tier: "NU",
160
+ tier: "PU",
159
161
  },
160
162
  nidoranm: {
161
163
  randomBattleMoves: ["blizzard", "bodyslam", "thunderbolt"],
@@ -211,7 +213,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
211
213
  },
212
214
  golbat: {
213
215
  randomBattleMoves: ["confuseray", "doubleedge", "hyperbeam", "megadrain"],
214
- tier: "NU",
216
+ tier: "PU",
215
217
  },
216
218
  oddish: {
217
219
  randomBattleMoves: ["doubleedge", "sleeppowder"],
@@ -228,7 +230,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
228
230
  vileplume: {
229
231
  randomBattleMoves: ["bodyslam", "sleeppowder", "stunspore", "swordsdance"],
230
232
  essentialMove: "megadrain",
231
- tier: "NU",
233
+ tier: "PU",
232
234
  },
233
235
  paras: {
234
236
  randomBattleMoves: ["bodyslam", "megadrain"],
@@ -240,7 +242,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
240
242
  randomBattleMoves: ["bodyslam", "megadrain"],
241
243
  essentialMove: "spore",
242
244
  exclusiveMoves: ["growth", "hyperbeam", "slash", "stunspore", "stunspore", "swordsdance"],
243
- tier: "NU",
245
+ tier: "PU",
244
246
  },
245
247
  venonat: {
246
248
  randomBattleMoves: ["psychic", "sleeppowder", "stunspore"],
@@ -294,7 +296,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
294
296
  primeape: {
295
297
  randomBattleMoves: ["bodyslam", "rockslide", "submission"],
296
298
  exclusiveMoves: ["counter", "hyperbeam", "hyperbeam"],
297
- tier: "NU",
299
+ tier: "PU",
298
300
  },
299
301
  growlithe: {
300
302
  randomBattleMoves: ["bodyslam", "fireblast", "flamethrower", "reflect"],
@@ -303,7 +305,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
303
305
  arcanine: {
304
306
  randomBattleMoves: ["bodyslam", "fireblast", "hyperbeam"],
305
307
  exclusiveMoves: ["flamethrower", "reflect"],
306
- tier: "NU",
308
+ tier: "PU",
307
309
  },
308
310
  poliwag: {
309
311
  randomBattleMoves: ["blizzard", "surf"],
@@ -315,7 +317,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
315
317
  randomBattleMoves: ["blizzard", "surf"],
316
318
  essentialMove: "amnesia",
317
319
  exclusiveMoves: ["counter", "hypnosis", "hypnosis", "psychic"],
318
- tier: "NFE",
320
+ tier: "NU",
319
321
  },
320
322
  poliwrath: {
321
323
  randomBattleMoves: ["blizzard", "bodyslam", "earthquake", "submission"],
@@ -352,7 +354,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
352
354
  machamp: {
353
355
  randomBattleMoves: ["bodyslam", "earthquake", "submission"],
354
356
  exclusiveMoves: ["counter", "hyperbeam", "rockslide", "rockslide"],
355
- tier: "NU",
357
+ tier: "PU",
356
358
  },
357
359
  bellsprout: {
358
360
  randomBattleMoves: ["doubleedge", "sleeppowder", "stunspore", "swordsdance"],
@@ -400,7 +402,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
400
402
  },
401
403
  rapidash: {
402
404
  randomBattleMoves: ["agility", "bodyslam", "fireblast", "hyperbeam"],
403
- tier: "NU",
405
+ tier: "PU",
404
406
  },
405
407
  slowpoke: {
406
408
  randomBattleMoves: ["earthquake", "surf"],
@@ -422,12 +424,12 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
422
424
  magneton: {
423
425
  randomBattleMoves: ["thunder", "thunderbolt", "thunderwave"],
424
426
  exclusiveMoves: ["doubleedge", "hyperbeam", "hyperbeam", "mimic", "substitute", "toxic"],
425
- tier: "NU",
427
+ tier: "PU",
426
428
  },
427
429
  farfetchd: {
428
430
  randomBattleMoves: ["agility", "bodyslam", "swordsdance"],
429
431
  essentialMove: "slash",
430
- tier: "NU",
432
+ tier: "PU",
431
433
  },
432
434
  doduo: {
433
435
  randomBattleMoves: ["agility", "bodyslam", "doubleedge", "drillpeck"],
@@ -457,7 +459,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
457
459
  randomBattleMoves: ["bodyslam", "sludge"],
458
460
  essentialMove: "explosion",
459
461
  exclusiveMoves: ["fireblast", "hyperbeam", "megadrain", "megadrain"],
460
- tier: "NU",
462
+ tier: "PU",
461
463
  },
462
464
  shellder: {
463
465
  randomBattleMoves: ["blizzard", "doubleedge", "explosion", "surf"],
@@ -488,7 +490,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
488
490
  },
489
491
  onix: {
490
492
  randomBattleMoves: ["bodyslam", "earthquake", "explosion", "rockslide"],
491
- tier: "NU",
493
+ tier: "PU",
492
494
  },
493
495
  drowzee: {
494
496
  randomBattleMoves: ["hypnosis", "psychic", "thunderwave"],
@@ -516,13 +518,13 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
516
518
  electrode: {
517
519
  randomBattleMoves: ["explosion", "thunderbolt", "thunderwave"],
518
520
  exclusiveMoves: ["hyperbeam", "screech", "thunder", "toxic"],
519
- tier: "NU",
521
+ tier: "PU",
520
522
  },
521
523
  exeggcute: {
522
524
  randomBattleMoves: ["sleeppowder", "stunspore"],
523
525
  essentialMove: "psychic",
524
526
  exclusiveMoves: ["doubleedge", "explosion", "explosion"],
525
- tier: "LC",
527
+ tier: "NU",
526
528
  },
527
529
  exeggutor: {
528
530
  randomBattleMoves: ["explosion", "psychic", "sleeppowder"],
@@ -535,23 +537,23 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
535
537
  },
536
538
  marowak: {
537
539
  randomBattleMoves: ["blizzard", "bodyslam", "earthquake", "seismictoss"],
538
- tier: "NU",
540
+ tier: "PU",
539
541
  },
540
542
  hitmonlee: {
541
543
  randomBattleMoves: ["bodyslam", "highjumpkick", "seismictoss"],
542
544
  exclusiveMoves: ["counter", "counter", "meditate"],
543
- tier: "NU",
545
+ tier: "PU",
544
546
  },
545
547
  hitmonchan: {
546
548
  randomBattleMoves: ["bodyslam", "seismictoss", "submission"],
547
549
  exclusiveMoves: ["agility", "counter", "counter"],
548
- tier: "NU",
550
+ tier: "PU",
549
551
  },
550
552
  lickitung: {
551
553
  randomBattleMoves: ["hyperbeam", "swordsdance"],
552
554
  essentialMove: "bodyslam",
553
555
  exclusiveMoves: ["blizzard", "earthquake", "earthquake", "earthquake"],
554
- tier: "NU",
556
+ tier: "PU",
555
557
  },
556
558
  koffing: {
557
559
  randomBattleMoves: ["explosion", "fireblast", "sludge", "thunderbolt"],
@@ -559,7 +561,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
559
561
  },
560
562
  weezing: {
561
563
  randomBattleMoves: ["explosion", "fireblast", "sludge", "thunderbolt"],
562
- tier: "NU",
564
+ tier: "PU",
563
565
  },
564
566
  rhyhorn: {
565
567
  randomBattleMoves: ["bodyslam", "earthquake", "rockslide", "substitute"],
@@ -606,7 +608,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
606
608
  seaking: {
607
609
  randomBattleMoves: ["blizzard", "doubleedge", "surf"],
608
610
  exclusiveMoves: ["agility", "agility", "hyperbeam"],
609
- tier: "NU",
611
+ tier: "PU",
610
612
  },
611
613
  staryu: {
612
614
  randomBattleMoves: ["blizzard", "thunderbolt", "thunderwave"],
@@ -626,7 +628,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
626
628
  },
627
629
  scyther: {
628
630
  randomBattleMoves: ["agility", "hyperbeam", "slash", "swordsdance"],
629
- tier: "NU",
631
+ tier: "PU",
630
632
  },
631
633
  jynx: {
632
634
  randomBattleMoves: ["blizzard", "lovelykiss", "psychic"],
@@ -640,12 +642,12 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
640
642
  magmar: {
641
643
  randomBattleMoves: ["bodyslam", "confuseray", "fireblast"],
642
644
  exclusiveMoves: ["hyperbeam", "psychic"],
643
- tier: "NU",
645
+ tier: "PU",
644
646
  },
645
647
  pinsir: {
646
648
  randomBattleMoves: ["bodyslam", "hyperbeam", "swordsdance"],
647
649
  exclusiveMoves: ["seismictoss", "submission", "submission"],
648
- tier: "NU",
650
+ tier: "PU",
649
651
  },
650
652
  tauros: {
651
653
  randomBattleMoves: ["bodyslam", "earthquake", "hyperbeam"],
@@ -669,7 +671,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
669
671
  },
670
672
  ditto: {
671
673
  randomBattleMoves: ["transform"],
672
- tier: "NU",
674
+ tier: "PU",
673
675
  },
674
676
  eevee: {
675
677
  randomBattleMoves: ["doubleedge", "quickattack", "reflect"],
@@ -690,7 +692,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
690
692
  },
691
693
  flareon: {
692
694
  randomBattleMoves: ["bodyslam", "fireblast", "hyperbeam", "quickattack"],
693
- tier: "NU",
695
+ tier: "PU",
694
696
  },
695
697
  porygon: {
696
698
  randomBattleMoves: ["blizzard", "thunderwave"],
@@ -662,7 +662,7 @@ export const Scripts: ModdedBattleScriptsData = {
662
662
  if (!isCrit) {
663
663
  // In gen 1, the critical chance is based on speed.
664
664
  // First, we get the base speed, divide it by 2 and floor it. This is our current crit chance.
665
- let critChance = Math.floor(source.species.baseStats['spe'] / 2);
665
+ let critChance = Math.floor(this.dex.species.get(source.set.species).baseStats['spe'] / 2);
666
666
 
667
667
  // Now we check for focus energy volatile.
668
668
  if (source.volatiles['focusenergy']) {
@@ -50,6 +50,10 @@ export const Items: {[k: string]: ModdedItemData} = {
50
50
  }
51
51
  },
52
52
  },
53
+ fastball: {
54
+ inherit: true,
55
+ isNonstandard: null,
56
+ },
53
57
  focusband: {
54
58
  inherit: true,
55
59
  onDamage(damage, target, source, effect) {
@@ -68,6 +72,10 @@ export const Items: {[k: string]: ModdedItemData} = {
68
72
  }
69
73
  },
70
74
  },
75
+ heavyball: {
76
+ inherit: true,
77
+ isNonstandard: null,
78
+ },
71
79
  kingsrock: {
72
80
  inherit: true,
73
81
  onModifyMove(move) {
@@ -91,11 +99,19 @@ export const Items: {[k: string]: ModdedItemData} = {
91
99
  onResidualOrder: 5,
92
100
  onResidualSubOrder: 1,
93
101
  },
102
+ levelball: {
103
+ inherit: true,
104
+ isNonstandard: null,
105
+ },
94
106
  lightball: {
95
107
  inherit: true,
96
108
  // In Gen 2 this happens in stat calculation directly.
97
109
  onModifySpA() {},
98
110
  },
111
+ loveball: {
112
+ inherit: true,
113
+ isNonstandard: null,
114
+ },
99
115
  luckypunch: {
100
116
  inherit: true,
101
117
  onModifyCritRatioPriority: -1,
@@ -105,6 +121,10 @@ export const Items: {[k: string]: ModdedItemData} = {
105
121
  }
106
122
  },
107
123
  },
124
+ lureball: {
125
+ inherit: true,
126
+ isNonstandard: null,
127
+ },
108
128
  magnet: {
109
129
  inherit: true,
110
130
  onModifySpA() {},
@@ -138,6 +158,10 @@ export const Items: {[k: string]: ModdedItemData} = {
138
158
  }
139
159
  },
140
160
  },
161
+ moonball: {
162
+ inherit: true,
163
+ isNonstandard: null,
164
+ },
141
165
  mysticwater: {
142
166
  inherit: true,
143
167
  onModifySpA() {},
@@ -201,6 +225,10 @@ export const Items: {[k: string]: ModdedItemData} = {
201
225
  }
202
226
  },
203
227
  },
228
+ sportball: {
229
+ inherit: true,
230
+ isNonstandard: null,
231
+ },
204
232
  stick: {
205
233
  inherit: true,
206
234
  onModifyCritRatioPriority: -1,
@@ -129,7 +129,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
129
129
  return false;
130
130
  },
131
131
  beforeTurnCallback() {},
132
- onTryHit() {},
132
+ onTry() {},
133
133
  condition: {},
134
134
  priority: -1,
135
135
  },
@@ -446,7 +446,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
446
446
  return false;
447
447
  },
448
448
  beforeTurnCallback() {},
449
- onTryHit() {},
449
+ onTry() {},
450
450
  condition: {},
451
451
  priority: -1,
452
452
  },
@@ -83,6 +83,10 @@ export const Items: {[k: string]: ModdedItemData} = {
83
83
  gen: 3,
84
84
  isNonstandard: "Unobtainable",
85
85
  },
86
+ fastball: {
87
+ inherit: true,
88
+ isNonstandard: "Unobtainable",
89
+ },
86
90
  figyberry: {
87
91
  inherit: true,
88
92
  onUpdate() {},
@@ -115,6 +119,10 @@ export const Items: {[k: string]: ModdedItemData} = {
115
119
  }
116
120
  },
117
121
  },
122
+ heavyball: {
123
+ inherit: true,
124
+ isNonstandard: "Unobtainable",
125
+ },
118
126
  iapapaberry: {
119
127
  inherit: true,
120
128
  onUpdate() {},
@@ -160,6 +168,10 @@ export const Items: {[k: string]: ModdedItemData} = {
160
168
  return accuracy * 0.95;
161
169
  },
162
170
  },
171
+ levelball: {
172
+ inherit: true,
173
+ isNonstandard: "Unobtainable",
174
+ },
163
175
  liechiberry: {
164
176
  inherit: true,
165
177
  onUpdate() {},
@@ -180,6 +192,14 @@ export const Items: {[k: string]: ModdedItemData} = {
180
192
  },
181
193
  onBasePower() {},
182
194
  },
195
+ loveball: {
196
+ inherit: true,
197
+ isNonstandard: "Unobtainable",
198
+ },
199
+ lureball: {
200
+ inherit: true,
201
+ isNonstandard: "Unobtainable",
202
+ },
183
203
  magnet: {
184
204
  inherit: true,
185
205
  onBasePower() {},
@@ -221,6 +241,10 @@ export const Items: {[k: string]: ModdedItemData} = {
221
241
  }
222
242
  },
223
243
  },
244
+ moonball: {
245
+ inherit: true,
246
+ isNonstandard: "Unobtainable",
247
+ },
224
248
  mysticwater: {
225
249
  inherit: true,
226
250
  onBasePower() {},
@@ -363,6 +387,10 @@ export const Items: {[k: string]: ModdedItemData} = {
363
387
  }
364
388
  },
365
389
  },
390
+ sportball: {
391
+ inherit: true,
392
+ isNonstandard: "Unobtainable",
393
+ },
366
394
  starfberry: {
367
395
  inherit: true,
368
396
  onUpdate() {},
@@ -160,6 +160,16 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
160
160
  this.add('-activate', pokemon, 'ability: Forewarn', warnMove);
161
161
  },
162
162
  },
163
+ frisk: {
164
+ inherit: true,
165
+ onStart(pokemon) {
166
+ for (const target of pokemon.foes()) {
167
+ if (target.item && !target.itemState.knockedOff) {
168
+ this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]');
169
+ }
170
+ }
171
+ },
172
+ },
163
173
  hustle: {
164
174
  inherit: true,
165
175
  onSourceModifyAccuracyPriority: 7,
@@ -504,6 +514,16 @@ export const Abilities: {[k: string]: ModdedAbilityData} = {
504
514
  }
505
515
  },
506
516
  },
517
+ unburden: {
518
+ inherit: true,
519
+ condition: {
520
+ onModifySpe(spe, pokemon) {
521
+ if ((!pokemon.item || pokemon.itemState.knockedOff) && !pokemon.ignoringAbility()) {
522
+ return this.chainModify(2);
523
+ }
524
+ },
525
+ },
526
+ },
507
527
  vitalspirit: {
508
528
  inherit: true,
509
529
  rating: 2.5,
@@ -113,6 +113,10 @@ export const Items: {[k: string]: ModdedItemData} = {
113
113
  }
114
114
  },
115
115
  },
116
+ fastball: {
117
+ inherit: true,
118
+ isNonstandard: null,
119
+ },
116
120
  flameorb: {
117
121
  inherit: true,
118
122
  onResidualOrder: 10,
@@ -148,6 +152,10 @@ export const Items: {[k: string]: ModdedItemData} = {
148
152
  }
149
153
  },
150
154
  },
155
+ heavyball: {
156
+ inherit: true,
157
+ isNonstandard: null,
158
+ },
151
159
  ironball: {
152
160
  inherit: true,
153
161
  onEffectiveness() {},
@@ -181,6 +189,10 @@ export const Items: {[k: string]: ModdedItemData} = {
181
189
  onResidualOrder: 10,
182
190
  onResidualSubOrder: 4,
183
191
  },
192
+ levelball: {
193
+ inherit: true,
194
+ isNonstandard: null,
195
+ },
184
196
  lifeorb: {
185
197
  inherit: true,
186
198
  onModifyDamage() {},
@@ -214,6 +226,10 @@ export const Items: {[k: string]: ModdedItemData} = {
214
226
  }
215
227
  },
216
228
  },
229
+ loveball: {
230
+ inherit: true,
231
+ isNonstandard: null,
232
+ },
217
233
  luckypunch: {
218
234
  inherit: true,
219
235
  onModifyCritRatio(critRatio, user) {
@@ -222,6 +238,10 @@ export const Items: {[k: string]: ModdedItemData} = {
222
238
  }
223
239
  },
224
240
  },
241
+ lureball: {
242
+ inherit: true,
243
+ isNonstandard: null,
244
+ },
225
245
  lustrousorb: {
226
246
  inherit: true,
227
247
  onBasePower(basePower, user, target, move) {
@@ -286,6 +306,10 @@ export const Items: {[k: string]: ModdedItemData} = {
286
306
  },
287
307
  },
288
308
  },
309
+ moonball: {
310
+ inherit: true,
311
+ isNonstandard: null,
312
+ },
289
313
  razorfang: {
290
314
  inherit: true,
291
315
  onModifyMove(move) {
@@ -301,6 +325,10 @@ export const Items: {[k: string]: ModdedItemData} = {
301
325
  }
302
326
  },
303
327
  },
328
+ sportball: {
329
+ inherit: true,
330
+ isNonstandard: null,
331
+ },
304
332
  stick: {
305
333
  inherit: true,
306
334
  onModifyCritRatio(critRatio, user) {
@@ -541,12 +541,16 @@ export const Moves: {[k: string]: ModdedMoveData} = {
541
541
  },
542
542
  focuspunch: {
543
543
  inherit: true,
544
- beforeMoveCallback() { },
544
+ priorityChargeCallback() {},
545
+ beforeTurnCallback(pokemon) {
546
+ pokemon.addVolatile('focuspunch');
547
+ },
548
+ beforeMoveCallback() {},
545
549
  onTry(pokemon) {
546
- if (pokemon.volatiles['focuspunch'] && pokemon.volatiles['focuspunch'].lostFocus) {
550
+ if (pokemon.volatiles['focuspunch']?.lostFocus) {
547
551
  this.attrLastMove('[still]');
548
552
  this.add('cant', pokemon, 'Focus Punch', 'Focus Punch');
549
- return false;
553
+ return null;
550
554
  }
551
555
  },
552
556
  },
@@ -829,10 +833,13 @@ export const Moves: {[k: string]: ModdedMoveData} = {
829
833
  },
830
834
  knockoff: {
831
835
  inherit: true,
832
- onAfterHit(target, source) {
833
- const item = target.takeItem();
834
- if (item) {
835
- this.add('-enditem', target, item.name, '[from] move: Knock Off', '[of] ' + source);
836
+ onAfterHit(target, source, move) {
837
+ if (!target.item || target.itemState.knockedOff) return;
838
+ const item = target.getItem();
839
+ if (this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) {
840
+ target.itemState.knockedOff = true;
841
+ this.add('-enditem', target, item.name, '[from] move: Knock Off');
842
+ this.hint("In Gens 3-4, Knock Off only makes the target's item unusable; it cannot obtain a new item.", true);
836
843
  }
837
844
  },
838
845
  },
@@ -299,10 +299,6 @@ export const Items: {[k: string]: ModdedItemData} = {
299
299
  type: "Dragon",
300
300
  },
301
301
  },
302
- normalgem: {
303
- inherit: true,
304
- isNonstandard: null,
305
- },
306
302
  occaberry: {
307
303
  inherit: true,
308
304
  naturalGift: {