@pkmn/sim 0.5.15 → 0.5.18

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 (80) hide show
  1. package/build/config/formats.js +39 -57
  2. package/build/config/formats.js.map +1 -1
  3. package/build/data/formats-data.js +1 -1
  4. package/build/data/formats-data.js.map +1 -1
  5. package/build/data/items.js +1 -3
  6. package/build/data/items.js.map +1 -1
  7. package/build/data/learnsets.js +2 -2
  8. package/build/data/learnsets.js.map +1 -1
  9. package/build/data/mods/gen1/formats-data.js +1 -1
  10. package/build/data/mods/gen1/formats-data.js.map +1 -1
  11. package/build/data/mods/gen1/moves.js +1 -4
  12. package/build/data/mods/gen1/moves.js.map +1 -1
  13. package/build/data/mods/gen2/moves.js +0 -3
  14. package/build/data/mods/gen2/moves.js.map +1 -1
  15. package/build/data/mods/gen3/moves.js +0 -10
  16. package/build/data/mods/gen3/moves.js.map +1 -1
  17. package/build/data/mods/gen3/scripts.js +2 -2
  18. package/build/data/mods/gen3/scripts.js.map +1 -1
  19. package/build/data/mods/gen4/moves.js +4 -5
  20. package/build/data/mods/gen4/moves.js.map +1 -1
  21. package/build/data/mods/gen4/rulesets.js +2 -1
  22. package/build/data/mods/gen4/rulesets.js.map +1 -1
  23. package/build/data/mods/gen5/rulesets.js +2 -1
  24. package/build/data/mods/gen5/rulesets.js.map +1 -1
  25. package/build/data/mods/gen7/formats-data.js +4 -4
  26. package/build/data/mods/gen7/formats-data.js.map +1 -1
  27. package/build/data/mods/gen7/rulesets.js +2 -1
  28. package/build/data/mods/gen7/rulesets.js.map +1 -1
  29. package/build/data/moves.js +59 -79
  30. package/build/data/moves.js.map +1 -1
  31. package/build/data/pokedex.js +2 -2
  32. package/build/data/pokedex.js.map +1 -1
  33. package/build/data/rulesets.js +3 -4
  34. package/build/data/rulesets.js.map +1 -1
  35. package/build/data/text/items.js +1 -0
  36. package/build/data/text/items.js.map +1 -1
  37. package/build/data/text/moves.js +5 -3
  38. package/build/data/text/moves.js.map +1 -1
  39. package/build/sim/battle-actions.js +12 -4
  40. package/build/sim/battle-actions.js.map +1 -1
  41. package/build/sim/battle.js +43 -5
  42. package/build/sim/battle.js.map +1 -1
  43. package/build/sim/dex-conditions.d.ts +1 -0
  44. package/build/sim/dex-conditions.js.map +1 -1
  45. package/build/sim/dex-moves.d.ts +1 -1
  46. package/build/sim/exported-global-types.d.ts +1 -0
  47. package/build/sim/global-types.d.ts +1 -0
  48. package/build/sim/team-validator.js +15 -4
  49. package/build/sim/team-validator.js.map +1 -1
  50. package/build/sim/tools/exhaustive-runner.d.ts +9 -0
  51. package/build/sim/tools/exhaustive-runner.js +18 -7
  52. package/build/sim/tools/exhaustive-runner.js.map +1 -1
  53. package/config/formats.ts +39 -57
  54. package/data/formats-data.ts +1 -1
  55. package/data/items.ts +1 -3
  56. package/data/learnsets.ts +2 -2
  57. package/data/mods/gen1/formats-data.ts +1 -1
  58. package/data/mods/gen1/moves.ts +1 -4
  59. package/data/mods/gen2/moves.ts +0 -3
  60. package/data/mods/gen3/moves.ts +0 -10
  61. package/data/mods/gen3/scripts.ts +3 -3
  62. package/data/mods/gen4/moves.ts +3 -5
  63. package/data/mods/gen4/rulesets.ts +2 -1
  64. package/data/mods/gen5/rulesets.ts +2 -1
  65. package/data/mods/gen7/formats-data.ts +4 -4
  66. package/data/mods/gen7/rulesets.ts +2 -1
  67. package/data/moves.ts +59 -70
  68. package/data/pokedex.ts +2 -2
  69. package/data/rulesets.ts +3 -6
  70. package/data/text/items.ts +2 -0
  71. package/data/text/moves.ts +6 -3
  72. package/package.json +1 -1
  73. package/sim/battle-actions.ts +16 -5
  74. package/sim/battle.ts +42 -5
  75. package/sim/dex-conditions.ts +1 -0
  76. package/sim/dex-moves.ts +1 -1
  77. package/sim/exported-global-types.ts +3 -0
  78. package/sim/global-types.ts +3 -0
  79. package/sim/team-validator.ts +16 -4
  80. package/sim/tools/exhaustive-runner.ts +30 -11
package/config/formats.ts CHANGED
@@ -254,7 +254,7 @@ export const Formats: FormatList = [
254
254
  'Larvesta', 'Magby', 'Magnemite', 'Mareanie', 'Mienfoo', 'Mudbray', 'Munchlax', 'Natu', 'Onix', 'Pawniard',
255
255
  'Ponyta', 'Ponyta-Galar', 'Porygon', 'Slowpoke-Base', 'Staryu', 'Timburr', 'Trapinch', 'Tyrunt',
256
256
  // LC UUBL
257
- 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
257
+ 'Archen', 'Farfetch\u2019d-Galar', 'Scorbunny', 'Shellder', 'Wingull',
258
258
  ],
259
259
  },
260
260
  {
@@ -359,7 +359,7 @@ export const Formats: FormatList = [
359
359
  gameType: 'doubles',
360
360
  searchShow: false,
361
361
  ruleset: ['Standard Doubles', 'Little Cup', 'Dynamax Clause', 'Swagger Clause', 'Sleep Clause Mod'],
362
- banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix', 'Vulpix-Alola', 'Ally Switch'],
362
+ banlist: ['Corsola-Galar', 'Cutiefly', 'Ponyta-Base', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix-Base', 'Ally Switch'],
363
363
  },
364
364
  {
365
365
  name: "[Gen 8] VGC 2022",
@@ -626,11 +626,12 @@ export const Formats: FormatList = [
626
626
  ruleset: ['Standard', 'Crazyhouse Rule', 'Dynamax Clause', 'Sleep Moves Clause', 'Evasion Abilities Clause', '!Sleep Clause Mod'],
627
627
  banlist: [
628
628
  'Calyrex-Ice', 'Calyrex-Shadow', 'Cinderace', 'Darmanitan-Galar', 'Dialga', 'Dracovish', 'Eternatus', 'Genesect', 'Giratina',
629
- 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna',
630
- 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram',
631
- 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
632
- 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Bright Powder', 'King\'s Rock', 'Lax Incense',
633
- 'Baton Pass', 'Explosion', 'Final Gambit', 'Misty Explosion', 'Self-Destruct',
629
+ 'Giratina-Origin', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia',
630
+ 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa',
631
+ 'Rayquaza', 'Reshiram', 'Solgaleo', 'Spectrier', 'Urshifu-Base', 'Xerneas', 'Yveltal', 'Zacian', 'Zacian-Crowned', 'Zamazenta',
632
+ 'Zamazenta-Crowned', 'Zekrom', 'Zygarde-Base', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'Bright Powder',
633
+ 'King\'s Rock', 'Lax Incense', 'Baton Pass', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Memento',
634
+ 'Misty Explosion', 'Self-Destruct',
634
635
  ],
635
636
  },
636
637
  {
@@ -643,17 +644,18 @@ export const Formats: FormatList = [
643
644
  mod: 'pokebilities',
644
645
  ruleset: ['[Gen 8] Pokebilities', '!Obtainable Abilities', 'AAA Restricted Abilities', '2 Ability Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
645
646
  banlist: [
646
- 'Blacephalon', 'Buzzwole', 'Clefable', 'Dragapult', 'Dragonite', 'Kartana', 'Melmetal', 'Noivern', 'Pangoro', 'Perrserker', 'Rillaboom',
647
- 'Tapu Lele', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Zamazenta-Crowned', 'Arena Trap', 'Moody', 'Shadow Tag', 'Wonder Guard',
648
- 'Chlorophyll + Desolate Land', 'Chlorophyll + Drought', 'Regenerator + Emergency Exit', 'Regenerator + Multiscale', 'Regenerator + Shadow Shield',
649
- 'Regenerator + Wimp Out', 'Sand Rush + Sand Stream', 'Slush Rush + Snow Warning', 'Swift Swim + Drizzle', 'Swift Swim + Primordial Sea',
650
- 'Regenerator > 2',
647
+ 'Alakazam', 'Blacephalon', 'Buzzwole', 'Clefable', 'Dragapult', 'Dragonite', 'Gengar', 'Kartana', 'Keldeo', 'Kyurem', 'Melmetal', 'Mienshao',
648
+ 'Noivern', 'Obstagoon', 'Perrserker', 'Rillaboom', 'Tapu Lele', 'Urshifu', 'Urshifu-Rapid-Strike', 'Victini', 'Weavile', 'Zamazenta-Crowned',
649
+ 'Zapdos-Galar', 'Arena Trap', 'Moody', 'Shadow Tag', 'Wonder Guard', 'Chlorophyll + Desolate Land', 'Chlorophyll + Drought', 'Electric Surge + Surge Surfer',
650
+ 'Regenerator + Emergency Exit', 'Regenerator + Multiscale', 'Regenerator + Shadow Shield', 'Regenerator + Wimp Out', 'Sand Rush + Sand Stream',
651
+ 'Slush Rush + Snow Warning', 'Swift Swim + Drizzle', 'Swift Swim + Primordial Sea', 'Snow Cloak + Snow Warning', 'Sand Veil + Sand Stream',
652
+ 'Regenerator > 2', 'Bright Powder', 'Lax Incense', 'Quick Claw',
651
653
  ],
652
- unbanlist: ['Dracozolt'],
653
654
  restricted: [
654
655
  'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out',
655
- 'Intrepid Sword', 'Libero', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Prankster', 'Protean', 'Pure Power', 'Simple', 'Stakeout',
656
- 'Speed Boost', 'Tinted Lens', 'Water Bubble',
656
+ 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Prankster', 'Protean', 'Pure Power',
657
+ 'Quick Draw', 'Sand Veil', 'Serene Grace', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Triage',
658
+ 'Unburden', 'Water Bubble',
657
659
  ],
658
660
  },
659
661
 
@@ -681,25 +683,6 @@ export const Formats: FormatList = [
681
683
  'Water Bubble', 'Wonder Guard', 'Comatose + Sleep Talk', 'Rusted Sword', 'Court Change', 'Bolt Beak', 'Double Iron Bash',
682
684
  'Octolock', 'Shell Smash',
683
685
  ],
684
- onChangeSet(set) {
685
- const item = this.dex.toID(set.item);
686
- if (set.species === 'Zacian' && item === 'rustedsword') {
687
- set.species = 'Zacian-Crowned';
688
- set.ability = 'Intrepid Sword';
689
- const ironHead = set.moves.indexOf('ironhead');
690
- if (ironHead >= 0) {
691
- set.moves[ironHead] = 'behemothblade';
692
- }
693
- }
694
- if (set.species === 'Zamazenta' && item === 'rustedshield') {
695
- set.species = 'Zamazenta-Crowned';
696
- set.ability = 'Dauntless Shield';
697
- const ironHead = set.moves.indexOf('ironhead');
698
- if (ironHead >= 0) {
699
- set.moves[ironHead] = 'behemothbash';
700
- }
701
- }
702
- },
703
686
  },
704
687
  {
705
688
  name: "[Gen 8] Almost Any Ability",
@@ -721,15 +704,6 @@ export const Formats: FormatList = [
721
704
  'Innards Out', 'Intrepid Sword', 'Libero', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Parental Bond', 'Poison Heal', 'Protean',
722
705
  'Pure Power', 'Shadow Tag', 'Simple', 'Stakeout', 'Speed Boost', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Baton Pass',
723
706
  ],
724
- onValidateSet(set) {
725
- // Temporary fix until battle-only is implemented properly
726
- if (this.toID(set.species) === 'zamazentacrowned' && this.toID(set.ability) !== 'dauntlessshield') {
727
- return [`Zamazenta-Crowned can only use Dauntless Shield because it is a battle-only forme.`];
728
- }
729
- if (this.toID(set.species) === 'zaciancrowned' && this.toID(set.ability) !== 'intrepidsword') {
730
- return [`Zacian-Crowned can only use Intrepid Sword because it is a battle-only forme.`];
731
- }
732
- },
733
707
  },
734
708
  {
735
709
  name: "[Gen 8] Mix and Mega",
@@ -900,9 +874,6 @@ export const Formats: FormatList = [
900
874
  const stat = Dex.stats.ids()[target.side.team.indexOf(target.set)];
901
875
  const newSpecies = this.dex.deepClone(species);
902
876
  let godSpecies = this.dex.species.get(god.species);
903
- if (godSpecies.forme === 'Crowned') {
904
- godSpecies = this.dex.species.get(godSpecies.changesFrom || godSpecies.baseSpecies);
905
- }
906
877
  if (typeof godSpecies.battleOnly === 'string') {
907
878
  godSpecies = this.dex.species.get(godSpecies.battleOnly);
908
879
  }
@@ -1756,6 +1727,17 @@ export const Formats: FormatList = [
1756
1727
  }
1757
1728
  }
1758
1729
  },
1730
+ onSwitchOut(pokemon) {
1731
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
1732
+ pokemon.removeVolatile(innate);
1733
+ }
1734
+ },
1735
+ onFaint(pokemon) {
1736
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
1737
+ const innateEffect = this.dex.conditions.get(innate) as Effect;
1738
+ this.singleEvent('End', innateEffect, null, pokemon);
1739
+ }
1740
+ },
1759
1741
  onAfterMega(pokemon) {
1760
1742
  for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
1761
1743
  pokemon.removeVolatile(innate);
@@ -2495,7 +2477,7 @@ export const Formats: FormatList = [
2495
2477
 
2496
2478
  mod: 'gen3',
2497
2479
  ruleset: ['Standard', 'One Boost Passer Clause'],
2498
- banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
2480
+ banlist: ['Uber', 'Sand Veil', 'Soundproof', 'Assist', 'Baton Pass + Block', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web', 'Smeargle + Ingrain'],
2499
2481
  },
2500
2482
  {
2501
2483
  name: "[Gen 2] OU",
@@ -2639,7 +2621,7 @@ export const Formats: FormatList = [
2639
2621
  name: "[Gen 6] Pure Hackmons",
2640
2622
  desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
2641
2623
  threads: [
2642
- `&bullet; <a href="https://www.smogon.com/forums/posts/8111004/">ORAS Pure Hackmons</a>`,
2624
+ `&bullet; <a href="https://www.smogon.com/forums/posts/9029427/">ORAS Pure Hackmons</a>`,
2643
2625
  ],
2644
2626
 
2645
2627
  mod: 'gen6',
@@ -3029,8 +3011,8 @@ export const Formats: FormatList = [
3029
3011
  searchShow: false,
3030
3012
  ruleset: ['Standard', 'Swagger Clause', 'Same Type Clause'],
3031
3013
  banlist: [
3032
- 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega',
3033
- 'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White',
3014
+ 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect',
3015
+ 'Gengar-Mega', 'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White',
3034
3016
  'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega',
3035
3017
  'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom',
3036
3018
  'Shadow Tag', 'Bright Powder', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Lax Incense', 'Quick Claw', 'Razor Fang', 'Smooth Rock',
@@ -3054,8 +3036,8 @@ export const Formats: FormatList = [
3054
3036
  banlist: [
3055
3037
  'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina',
3056
3038
  'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo',
3057
- 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom',
3058
- 'Focus Sash', 'Soul Dew', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Yawn',
3039
+ 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Snorlax', 'Xerneas', 'Yveltal',
3040
+ 'Zekrom', 'Focus Sash', 'Soul Dew', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Yawn',
3059
3041
  ],
3060
3042
  },
3061
3043
  {
@@ -3536,11 +3518,11 @@ export const Formats: FormatList = [
3536
3518
  searchShow: false,
3537
3519
  ruleset: ['[Gen 4] PU'],
3538
3520
  banlist: [
3539
- 'Ampharos', 'Armaldo', 'Bellossom', 'Dragonair', 'Gabite', 'Gastrodon', 'Glaceon', 'Glalie', 'Golduck',
3540
- 'Gorebyss', 'Hippopotas', 'Kadabra', 'Machoke', 'Magmar', 'Mantine', 'Marowak', 'Metang', 'Misdreavus',
3541
- 'Monferno', 'Mr. Mime', 'Muk', 'Murkrow', 'Pinsir', 'Politoed', 'Purugly', 'Quagsire', 'Raichu',
3542
- 'Rampardos', 'Rapidash', 'Regigigas', 'Relicanth', 'Rhydon', 'Scyther', 'Sneasel', 'Snover', 'Solrock',
3543
- 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Zangoose', 'Damp Rock',
3521
+ 'Ampharos', 'Armaldo', 'Bellossom', 'Dragonair', 'Electabuzz', 'Gabite', 'Gastrodon', 'Glaceon', 'Glalie',
3522
+ 'Golduck', 'Gorebyss', 'Hippopotas', 'Kadabra', 'Machoke', 'Magmar', 'Mantine', 'Marowak', 'Metang',
3523
+ 'Misdreavus', 'Monferno', 'Mr. Mime', 'Muk', 'Murkrow', 'Pinsir', 'Politoed', 'Purugly', 'Quagsire',
3524
+ 'Raichu', 'Rampardos', 'Rapidash', 'Regigigas', 'Relicanth', 'Rhydon', 'Scyther', 'Sneasel', 'Snover',
3525
+ 'Solrock', 'Tangela', 'Torkoal', 'Victreebel', 'Xatu', 'Zangoose', 'Damp Rock',
3544
3526
  ],
3545
3527
  },
3546
3528
  {
@@ -1382,7 +1382,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
1382
1382
  randomDoubleBattleMoves: ["fierywrath", "hurricane", "nastyplot", "protect"],
1383
1383
  randomDoubleBattleLevel: 75,
1384
1384
  randomBattleNoDynamaxMoves: ["agility", "fierywrath", "hurricane", "nastyplot", "rest"],
1385
- tier: "UU",
1385
+ tier: "UUBL",
1386
1386
  doublesTier: "DUU",
1387
1387
  },
1388
1388
  dratini: {
package/data/items.ts CHANGED
@@ -2349,7 +2349,7 @@ export const Items: {[itemid: string]: ItemData} = {
2349
2349
  },
2350
2350
  num: 1120,
2351
2351
  gen: 8,
2352
- // Hazard Immunity implemented in moves.js
2352
+ // Hazard Immunity implemented in moves.ts
2353
2353
  },
2354
2354
  helixfossil: {
2355
2355
  name: "Helix Fossil",
@@ -4664,7 +4664,6 @@ export const Items: {[itemid: string]: ItemData} = {
4664
4664
  }
4665
4665
  return true;
4666
4666
  },
4667
- forcedForme: "Zamazenta-Crowned",
4668
4667
  itemUser: ["Zamazenta-Crowned"],
4669
4668
  num: 1104,
4670
4669
  gen: 8,
@@ -4678,7 +4677,6 @@ export const Items: {[itemid: string]: ItemData} = {
4678
4677
  }
4679
4678
  return true;
4680
4679
  },
4681
- forcedForme: "Zacian-Crowned",
4682
4680
  itemUser: ["Zacian-Crowned"],
4683
4681
  num: 1103,
4684
4682
  gen: 8,
package/data/learnsets.ts CHANGED
@@ -76710,7 +76710,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
76710
76710
  },
76711
76711
  zaciancrowned: {
76712
76712
  learnset: {
76713
- behemothblade: ["8M", "8L33"],
76713
+ behemothblade: ["8R"],
76714
76714
  },
76715
76715
  eventOnly: true,
76716
76716
  },
@@ -76781,7 +76781,7 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
76781
76781
  },
76782
76782
  zamazentacrowned: {
76783
76783
  learnset: {
76784
- behemothbash: ["8M", "8L33"],
76784
+ behemothbash: ["8R"],
76785
76785
  },
76786
76786
  eventOnly: true,
76787
76787
  },
@@ -179,7 +179,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
179
179
  randomBattleMoves: ["bodyslam", "thunderbolt", "thunderwave"],
180
180
  essentialMove: "blizzard",
181
181
  exclusiveMoves: ["counter", "psychic", "seismictoss", "sing", "sing"],
182
- tier: "NFE",
182
+ tier: "LC",
183
183
  },
184
184
  clefable: {
185
185
  randomBattleMoves: ["bodyslam", "thunderbolt", "thunderwave"],
@@ -38,7 +38,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
38
38
  condition: {
39
39
  duration: 2,
40
40
  durationCallback(target, source, effect) {
41
- return this.random(3, 4);
41
+ return this.random(3, 5);
42
42
  },
43
43
  onStart(pokemon) {
44
44
  this.effectState.totalDamage = 0;
@@ -500,9 +500,6 @@ export const Moves: {[k: string]: ModdedMoveData} = {
500
500
  metronome: {
501
501
  inherit: true,
502
502
  noMetronome: ["Metronome", "Struggle"],
503
- secondary: null,
504
- target: "self",
505
- type: "Normal",
506
503
  },
507
504
  mimic: {
508
505
  inherit: true,
@@ -204,9 +204,6 @@ export const Moves: {[k: string]: ModdedMoveData} = {
204
204
  }
205
205
  this.effectState.move = lockedMove;
206
206
  this.add('-start', target, 'Encore');
207
- if (!this.queue.willMove(target)) {
208
- this.effectState.duration++;
209
- }
210
207
  },
211
208
  onOverrideAction(pokemon) {
212
209
  return this.effectState.move;
@@ -304,9 +304,6 @@ export const Moves: {[k: string]: ModdedMoveData} = {
304
304
  }
305
305
  this.effectState.move = target.lastMove.id;
306
306
  this.add('-start', target, 'Encore');
307
- if (!this.queue.willMove(target)) {
308
- this.effectState.duration++;
309
- }
310
307
  },
311
308
  onOverrideAction(pokemon) {
312
309
  return this.effectState.move;
@@ -549,13 +546,6 @@ export const Moves: {[k: string]: ModdedMoveData} = {
549
546
  },
550
547
  sleeptalk: {
551
548
  inherit: true,
552
- beforeMoveCallback(pokemon) {
553
- if (pokemon.volatiles['choicelock'] || pokemon.volatiles['encore']) {
554
- this.addMove('move', pokemon, 'Sleep Talk');
555
- this.add('-fail', pokemon);
556
- return true;
557
- }
558
- },
559
549
  onHit(pokemon) {
560
550
  const moves = [];
561
551
  for (const moveSlot of pokemon.moveSlots) {
@@ -69,9 +69,6 @@ export const Scripts: ModdedBattleScriptsData = {
69
69
  // Mod 2 (Damage is floored after all multipliers are in)
70
70
  baseDamage = Math.floor(this.battle.runEvent('ModifyDamagePhase2', pokemon, target, move, baseDamage));
71
71
 
72
- // this is not a modifier
73
- baseDamage = this.battle.randomizer(baseDamage);
74
-
75
72
  // STAB
76
73
  if (move.forceSTAB || type !== '???' && pokemon.hasType(type)) {
77
74
  // The "???" type never gets STAB
@@ -104,6 +101,9 @@ export const Scripts: ModdedBattleScriptsData = {
104
101
  // Final modifier.
105
102
  baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
106
103
 
104
+ // this is not a modifier
105
+ baseDamage = this.battle.randomizer(baseDamage);
106
+
107
107
  if (!Math.floor(baseDamage)) {
108
108
  return 1;
109
109
  }
@@ -448,9 +448,6 @@ export const Moves: {[k: string]: ModdedMoveData} = {
448
448
  }
449
449
  this.effectState.move = target.lastMove.id;
450
450
  this.add('-start', target, 'Encore');
451
- if (!this.queue.willMove(target)) {
452
- this.effectState.duration++;
453
- }
454
451
  },
455
452
  onOverrideAction(pokemon) {
456
453
  return this.effectState.move;
@@ -835,8 +832,9 @@ export const Moves: {[k: string]: ModdedMoveData} = {
835
832
  inherit: true,
836
833
  onAfterHit(target, source, move) {
837
834
  if (!target.item || target.itemState.knockedOff) return;
835
+ if (target.ability === 'multitype') return;
838
836
  const item = target.getItem();
839
- if (this.singleEvent('TakeItem', item, target.itemState, target, target, move, item)) {
837
+ if (this.runEvent('TakeItem', target, source, move, item)) {
840
838
  target.itemState.knockedOff = true;
841
839
  this.add('-enditem', target, item.name, '[from] move: Knock Off');
842
840
  this.hint("In Gens 3-4, Knock Off only makes the target's item unusable; it cannot obtain a new item.", true);
@@ -1652,7 +1650,7 @@ export const Moves: {[k: string]: ModdedMoveData} = {
1652
1650
  this.add('-sidestart', side, 'move: Toxic Spikes');
1653
1651
  this.effectState.layers++;
1654
1652
  },
1655
- onSwitchIn(pokemon) {
1653
+ onEntryHazard(pokemon) {
1656
1654
  if (!pokemon.isGrounded()) return;
1657
1655
  if (pokemon.hasType('Poison')) {
1658
1656
  this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] ' + pokemon);
@@ -13,7 +13,8 @@ export const Rulesets: {[k: string]: ModdedFormatData} = {
13
13
  this.add('clearpoke');
14
14
  for (const pokemon of this.getAllPokemon()) {
15
15
  const details = pokemon.details.replace(', shiny', '')
16
- .replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally|Zacian|Zamazenta|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*');
16
+ .replace(/(Arceus|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*')
17
+ .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed
17
18
  this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : '');
18
19
  }
19
20
  this.makeRequest('teampreview');
@@ -19,7 +19,8 @@ export const Rulesets: {[k: string]: ModdedFormatData} = {
19
19
  this.add('clearpoke');
20
20
  for (const pokemon of this.getAllPokemon()) {
21
21
  const details = pokemon.details.replace(', shiny', '')
22
- .replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally|Zacian|Zamazenta|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*');
22
+ .replace(/(Arceus|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*')
23
+ .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed
23
24
  const item = pokemon.item.includes('mail') ? 'mail' : pokemon.item ? 'item' : '';
24
25
  this.add('poke', pokemon.side.id, details, item);
25
26
  }
@@ -3046,7 +3046,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3046
3046
  doublesTier: "(DUU)",
3047
3047
  },
3048
3048
  sawk: {
3049
- randomBattleMoves: ["bulkup", "closecombat", "earthquake", "icepunch", "knockoff", "poisonjab"],
3049
+ randomBattleMoves: ["bulkup", "closecombat", "earthquake", "icepunch", "knockoff", "poisonjab", "stoneedge"],
3050
3050
  randomDoubleBattleMoves: ["closecombat", "icepunch", "knockoff", "protect", "rockslide"],
3051
3051
  tier: "PUBL",
3052
3052
  doublesTier: "(DUU)",
@@ -3362,7 +3362,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3362
3362
  tier: "NFE",
3363
3363
  },
3364
3364
  chandelure: {
3365
- randomBattleMoves: ["calmmind", "energyball", "fireblast", "hiddenpowerground", "painsplit", "shadowball", "substitute", "trick"],
3365
+ randomBattleMoves: ["calmmind", "energyball", "fireblast", "hiddenpowerground", "shadowball", "substitute", "trick"],
3366
3366
  randomDoubleBattleMoves: ["energyball", "heatwave", "overheat", "protect", "shadowball", "trick"],
3367
3367
  tier: "UU",
3368
3368
  doublesTier: "DUU",
@@ -3485,7 +3485,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3485
3485
  tier: "NFE",
3486
3486
  },
3487
3487
  hydreigon: {
3488
- randomBattleMoves: ["darkpulse", "dracometeor", "dragonpulse", "earthpower", "fireblast", "flashcannon", "roost", "superpower", "uturn"],
3488
+ randomBattleMoves: ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "superpower", "uturn"],
3489
3489
  randomDoubleBattleMoves: ["darkpulse", "dracometeor", "fireblast", "flashcannon", "protect", "tailwind", "uturn"],
3490
3490
  tier: "UU",
3491
3491
  doublesTier: "DUU",
@@ -3904,7 +3904,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
3904
3904
  tier: "NFE",
3905
3905
  },
3906
3906
  goodra: {
3907
- randomBattleMoves: ["dracometeor", "dragonpulse", "dragontail", "earthquake", "fireblast", "sludgebomb", "thunderbolt"],
3907
+ randomBattleMoves: ["dracometeor", "dragontail", "earthquake", "fireblast", "sludgebomb", "thunderbolt"],
3908
3908
  randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "fireblast", "muddywater", "powerwhip", "protect", "thunderbolt"],
3909
3909
  tier: "RU",
3910
3910
  doublesTier: "(DUU)",
@@ -36,7 +36,8 @@ export const Rulesets: {[k: string]: ModdedFormatData} = {
36
36
  this.add('clearpoke');
37
37
  for (const pokemon of this.getAllPokemon()) {
38
38
  const details = pokemon.details.replace(', shiny', '')
39
- .replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally|Zacian|Zamazenta|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*');
39
+ .replace(/(Arceus|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*')
40
+ .replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed
40
41
  this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : '');
41
42
  }
42
43
  this.makeRequest('teampreview');