@pkmn/sim 0.5.16 → 0.5.17
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.
- package/build/config/formats.js +32 -51
- package/build/config/formats.js.map +1 -1
- package/build/data/items.js +1 -3
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +2 -2
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen1/formats-data.js +1 -1
- package/build/data/mods/gen1/formats-data.js.map +1 -1
- package/build/data/mods/gen1/moves.js +1 -4
- package/build/data/mods/gen1/moves.js.map +1 -1
- package/build/data/mods/gen3/moves.js +0 -7
- package/build/data/mods/gen3/moves.js.map +1 -1
- package/build/data/mods/gen3/scripts.js +2 -2
- package/build/data/mods/gen3/scripts.js.map +1 -1
- package/build/data/mods/gen4/moves.js +1 -1
- package/build/data/mods/gen4/moves.js.map +1 -1
- package/build/data/mods/gen4/rulesets.js +2 -1
- package/build/data/mods/gen4/rulesets.js.map +1 -1
- package/build/data/mods/gen5/rulesets.js +2 -1
- package/build/data/mods/gen5/rulesets.js.map +1 -1
- package/build/data/mods/gen7/formats-data.js +4 -4
- package/build/data/mods/gen7/formats-data.js.map +1 -1
- package/build/data/mods/gen7/rulesets.js +2 -1
- package/build/data/mods/gen7/rulesets.js.map +1 -1
- package/build/data/moves.js +55 -74
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +2 -2
- package/build/data/pokedex.js.map +1 -1
- package/build/data/rulesets.js +3 -4
- package/build/data/rulesets.js.map +1 -1
- package/build/data/text/items.js +1 -0
- package/build/data/text/items.js.map +1 -1
- package/build/data/text/moves.js +5 -3
- package/build/data/text/moves.js.map +1 -1
- package/build/sim/battle-actions.js +9 -1
- package/build/sim/battle-actions.js.map +1 -1
- package/build/sim/battle.js +39 -1
- package/build/sim/battle.js.map +1 -1
- package/build/sim/dex-conditions.d.ts +1 -0
- package/build/sim/dex-conditions.js.map +1 -1
- package/build/sim/exported-global-types.d.ts +1 -0
- package/build/sim/global-types.d.ts +1 -0
- package/build/sim/team-validator.js +15 -4
- package/build/sim/team-validator.js.map +1 -1
- package/build/sim/tools/exhaustive-runner.d.ts +8 -0
- package/build/sim/tools/exhaustive-runner.js +18 -7
- package/build/sim/tools/exhaustive-runner.js.map +1 -1
- package/config/formats.ts +32 -51
- package/data/items.ts +1 -3
- package/data/learnsets.ts +2 -2
- package/data/mods/gen1/formats-data.ts +1 -1
- package/data/mods/gen1/moves.ts +1 -4
- package/data/mods/gen3/moves.ts +0 -7
- package/data/mods/gen3/scripts.ts +3 -3
- package/data/mods/gen4/moves.ts +1 -1
- package/data/mods/gen4/rulesets.ts +2 -1
- package/data/mods/gen5/rulesets.ts +2 -1
- package/data/mods/gen7/formats-data.ts +4 -4
- package/data/mods/gen7/rulesets.ts +2 -1
- package/data/moves.ts +55 -65
- package/data/pokedex.ts +2 -2
- package/data/rulesets.ts +3 -6
- package/data/text/items.ts +2 -0
- package/data/text/moves.ts +6 -3
- package/package.json +1 -1
- package/sim/battle-actions.ts +13 -1
- package/sim/battle.ts +38 -1
- package/sim/dex-conditions.ts +1 -0
- package/sim/exported-global-types.ts +3 -0
- package/sim/global-types.ts +3 -0
- package/sim/team-validator.ts +16 -4
- package/sim/tools/exhaustive-runner.ts +29 -11
|
@@ -38,7 +38,8 @@ exports.Rulesets = {
|
|
|
38
38
|
this.add('clearpoke');
|
|
39
39
|
for (const pokemon of this.getAllPokemon()) {
|
|
40
40
|
const details = pokemon.details.replace(', shiny', '')
|
|
41
|
-
.replace(/(Arceus|Gourgeist|
|
|
41
|
+
.replace(/(Arceus|Gourgeist|Pumpkaboo|Xerneas|Silvally|Urshifu)(-[a-zA-Z?-]+)?/g, '$1-*')
|
|
42
|
+
.replace(/(Zacian|Zamazenta)(?!-Crowned)/g, '$1-*'); // Hacked-in Crowned formes will be revealed
|
|
42
43
|
this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : '');
|
|
43
44
|
}
|
|
44
45
|
this.makeRequest('teampreview');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rulesets.js","sourceRoot":"","sources":["../../../../data/mods/gen7/rulesets.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAoC;IACxD,QAAQ,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,CAAC;KACnN;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,CAAC;KACnP;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR,sCAAsC;YACtC,oCAAoC;YACpC,qCAAqC;YAErC,4DAA4D;YAC5D,kDAAkD;YAClD,uCAAuC;YACvC,yCAAyC;YACzC,qCAAqC;SACrC;KACD;IACD,kBAAkB,EAAE;QACnB,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,gDAAgD;QACtD,OAAO,EAAE,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,yBAAyB,CAAC;QACpI,OAAO;YACN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,8GAA8G,CAAC,CAAC;QAClI,CAAC;KACD;IACD,WAAW,EAAE;QACZ,OAAO,EAAE,IAAI;QACb,aAAa;YACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;qBACpD,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"rulesets.js","sourceRoot":"","sources":["../../../../data/mods/gen7/rulesets.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAoC;IACxD,QAAQ,EAAE;QACT,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,CAAC;KACnN;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,YAAY,CAAC;KACnP;IACD,eAAe,EAAE;QAChB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR,sCAAsC;YACtC,oCAAoC;YACpC,qCAAqC;YAErC,4DAA4D;YAC5D,kDAAkD;YAClD,uCAAuC;YACvC,yCAAyC;YACzC,qCAAqC;SACrC;KACD;IACD,kBAAkB,EAAE;QACnB,UAAU,EAAE,eAAe;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,IAAI,EAAE,gDAAgD;QACtD,OAAO,EAAE,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,yBAAyB,CAAC;QACpI,OAAO;YACN,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,8GAA8G,CAAC,CAAC;QAClI,CAAC;KACD;IACD,WAAW,EAAE;QACZ,OAAO,EAAE,IAAI;QACb,aAAa;YACZ,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;qBACpD,OAAO,CAAC,uEAAuE,EAAE,MAAM,CAAC;qBACxF,OAAO,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,CAAC,4CAA4C;gBAClG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACvE;YACD,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QACjC,CAAC;KACD;CACD,CAAC"}
|
package/build/data/moves.js
CHANGED
|
@@ -2731,60 +2731,55 @@ exports.Moves = {
|
|
|
2731
2731
|
const offset = this.random(3) + 1;
|
|
2732
2732
|
// the list of all sides in counterclockwise order
|
|
2733
2733
|
const sides = [this.sides[0], this.sides[2], this.sides[1], this.sides[3]];
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
const
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
someCondition = true;
|
|
2745
|
-
}
|
|
2734
|
+
const temp = { 0: {}, 1: {}, 2: {}, 3: {} };
|
|
2735
|
+
for (const side of sides) {
|
|
2736
|
+
for (const id in side.sideConditions) {
|
|
2737
|
+
if (!sideConditions.includes(id))
|
|
2738
|
+
continue;
|
|
2739
|
+
temp[side.n][id] = side.sideConditions[id];
|
|
2740
|
+
delete side.sideConditions[id];
|
|
2741
|
+
const effectName = this.dex.conditions.get(id).name;
|
|
2742
|
+
this.add('-sideend', side, effectName, '[silent]');
|
|
2743
|
+
success = true;
|
|
2746
2744
|
}
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
[
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
this.add('-sidestart', side, effectName, '[silent]');
|
|
2758
|
-
}
|
|
2759
|
-
else {
|
|
2760
|
-
delete side.sideConditions[id];
|
|
2761
|
-
}
|
|
2745
|
+
}
|
|
2746
|
+
for (let i = 0; i < 4; i++) {
|
|
2747
|
+
const sourceSideConditions = temp[sides[i].n];
|
|
2748
|
+
const targetSide = sides[(i + offset) % 4]; // the next side in rotation
|
|
2749
|
+
for (const id in sourceSideConditions) {
|
|
2750
|
+
targetSide.sideConditions[id] = sourceSideConditions[id];
|
|
2751
|
+
const effectName = this.dex.conditions.get(id).name;
|
|
2752
|
+
let layers = sourceSideConditions[id].layers || 1;
|
|
2753
|
+
for (; layers > 0; layers--)
|
|
2754
|
+
this.add('-sidestart', targetSide, effectName, '[silent]');
|
|
2762
2755
|
}
|
|
2763
|
-
success = true;
|
|
2764
2756
|
}
|
|
2765
2757
|
}
|
|
2766
2758
|
else {
|
|
2767
|
-
const
|
|
2768
|
-
const
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
];
|
|
2774
|
-
}
|
|
2775
|
-
else if (sourceSide.sideConditions[id] && !targetSide.sideConditions[id]) {
|
|
2776
|
-
targetSide.sideConditions[id] = sourceSide.sideConditions[id];
|
|
2777
|
-
delete sourceSide.sideConditions[id];
|
|
2778
|
-
}
|
|
2779
|
-
else if (targetSide.sideConditions[id] && !sourceSide.sideConditions[id]) {
|
|
2780
|
-
sourceSide.sideConditions[id] = targetSide.sideConditions[id];
|
|
2781
|
-
delete targetSide.sideConditions[id];
|
|
2782
|
-
}
|
|
2783
|
-
else {
|
|
2759
|
+
const sourceSideConditions = source.side.sideConditions;
|
|
2760
|
+
const targetSideConditions = source.side.foe.sideConditions;
|
|
2761
|
+
const sourceTemp = {};
|
|
2762
|
+
const targetTemp = {};
|
|
2763
|
+
for (const id in sourceSideConditions) {
|
|
2764
|
+
if (!sideConditions.includes(id))
|
|
2784
2765
|
continue;
|
|
2785
|
-
|
|
2766
|
+
sourceTemp[id] = sourceSideConditions[id];
|
|
2767
|
+
delete sourceSideConditions[id];
|
|
2768
|
+
success = true;
|
|
2769
|
+
}
|
|
2770
|
+
for (const id in targetSideConditions) {
|
|
2771
|
+
if (!sideConditions.includes(id))
|
|
2772
|
+
continue;
|
|
2773
|
+
targetTemp[id] = targetSideConditions[id];
|
|
2774
|
+
delete targetSideConditions[id];
|
|
2786
2775
|
success = true;
|
|
2787
2776
|
}
|
|
2777
|
+
for (const id in sourceTemp) {
|
|
2778
|
+
targetSideConditions[id] = sourceTemp[id];
|
|
2779
|
+
}
|
|
2780
|
+
for (const id in targetTemp) {
|
|
2781
|
+
sourceSideConditions[id] = targetTemp[id];
|
|
2782
|
+
}
|
|
2788
2783
|
this.add('-swapsideconditions');
|
|
2789
2784
|
}
|
|
2790
2785
|
if (!success)
|
|
@@ -6813,7 +6808,7 @@ exports.Moves = {
|
|
|
6813
6808
|
onSideStart(side) {
|
|
6814
6809
|
this.add('-sidestart', side, 'move: G-Max Steelsurge');
|
|
6815
6810
|
},
|
|
6816
|
-
|
|
6811
|
+
onEntryHazard(pokemon) {
|
|
6817
6812
|
if (pokemon.hasItem('heavydutyboots'))
|
|
6818
6813
|
return;
|
|
6819
6814
|
// Ice Face and Disguise correctly get typed damage from Stealth Rock
|
|
@@ -11208,30 +11203,20 @@ exports.Moves = {
|
|
|
11208
11203
|
priority: 0,
|
|
11209
11204
|
flags: {},
|
|
11210
11205
|
noMetronome: [
|
|
11211
|
-
"After You", "Apple Acid", "Assist", "Astral Barrage", "Aura Wheel", "Baneful Bunker", "Beak Blast", "Behemoth Bash", "Behemoth Blade", "Belch", "Bestow", "Body Press", "Branch Poke", "Breaking Swipe", "Celebrate", "Chatter", "Clangorous Soul", "Copycat", "Counter", "Covet", "Crafty Shield", "Decorate", "Destiny Bond", "Detect", "Diamond Storm", "Double Iron Bash", "Dragon Ascent", "Dragon Energy", "Drum Beating", "Dynamax Cannon", "Endure", "Eternabeam", "False Surrender", "Feint", "Fiery Wrath", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Freezing Glare", "Glacial Lance", "Grav Apple", "Helping Hand", "Hold Hands", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "Jungle Healing", "King's Shield", "Life Dew", "Light of Ruin", "Mat Block", "Me First", "Meteor Assault", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Moongeist Beam", "Nature Power", "Nature's Madness", "Obstruct", "Origin Pulse", "Overdrive", "Photon Geyser", "Plasma Fists", "Precipice Blades", "Protect", "Pyro Ball", "Quash", "Quick Guard", "Rage Powder", "Relic Song", "Secret Sword", "Shell Trap", "Sketch", "Sleep Talk", "Snap Trap", "Snarl", "Snatch", "Snore", "Spectral Thief", "Spiky Shield", "Spirit Break", "Spotlight", "Steam Eruption", "Steel Beam", "Strange Steam", "Struggle", "Sunsteel Strike", "Surging Strikes", "Switcheroo", "Techno Blast", "Thief", "Thousand Arrows", "Thousand Waves", "Thunder Cage", "Thunderous Kick", "Transform", "Trick", "V-create", "Wicked Blow", "Wide Guard",
|
|
11206
|
+
"After You", "Apple Acid", "Assist", "Astral Barrage", "Aura Wheel", "Baneful Bunker", "Beak Blast", "Behemoth Bash", "Behemoth Blade", "Belch", "Bestow", "Body Press", "Branch Poke", "Breaking Swipe", "Celebrate", "Chatter", "Clangorous Soul", "Copycat", "Counter", "Covet", "Crafty Shield", "Decorate", "Destiny Bond", "Detect", "Diamond Storm", "Double Iron Bash", "Dragon Ascent", "Dragon Energy", "Dragon Hammer", "Drum Beating", "Dynamax Cannon", "Endure", "Eternabeam", "False Surrender", "Feint", "Fiery Wrath", "Fleur Cannon", "Focus Punch", "Follow Me", "Freeze Shock", "Freezing Glare", "Glacial Lance", "Grav Apple", "Helping Hand", "Hold Hands", "Hyperspace Fury", "Hyperspace Hole", "Ice Burn", "Instruct", "Jungle Healing", "King's Shield", "Life Dew", "Light of Ruin", "Mat Block", "Me First", "Meteor Assault", "Metronome", "Mimic", "Mind Blown", "Mirror Coat", "Mirror Move", "Moongeist Beam", "Nature Power", "Nature's Madness", "Obstruct", "Origin Pulse", "Overdrive", "Photon Geyser", "Plasma Fists", "Precipice Blades", "Protect", "Pyro Ball", "Quash", "Quick Guard", "Rage Powder", "Relic Song", "Secret Sword", "Shell Trap", "Sketch", "Sleep Talk", "Snap Trap", "Snarl", "Snatch", "Snore", "Spectral Thief", "Spiky Shield", "Spirit Break", "Spotlight", "Steam Eruption", "Steel Beam", "Strange Steam", "Struggle", "Sunsteel Strike", "Surging Strikes", "Switcheroo", "Techno Blast", "Thief", "Thousand Arrows", "Thousand Waves", "Thunder Cage", "Thunderous Kick", "Transform", "Trick", "V-create", "Wicked Blow", "Wide Guard",
|
|
11212
11207
|
],
|
|
11213
11208
|
onHit(target, source, effect) {
|
|
11214
|
-
const moves = []
|
|
11215
|
-
|
|
11216
|
-
|
|
11217
|
-
|
|
11218
|
-
continue;
|
|
11219
|
-
if (move.isZ || move.isMax || move.isNonstandard)
|
|
11220
|
-
continue;
|
|
11221
|
-
if (effect.noMetronome.includes(move.name))
|
|
11222
|
-
continue;
|
|
11223
|
-
if (this.dex.moves.get(id).gen > this.gen)
|
|
11224
|
-
continue;
|
|
11225
|
-
moves.push(move);
|
|
11226
|
-
}
|
|
11209
|
+
const moves = this.dex.moves.all().filter(move => ((![2, 4].includes(this.gen) || !source.moves.includes(move.id)) &&
|
|
11210
|
+
!move.realMove && !move.isZ && !move.isMax &&
|
|
11211
|
+
(!move.isNonstandard || move.isNonstandard === 'Unobtainable') &&
|
|
11212
|
+
!effect.noMetronome.includes(move.name)));
|
|
11227
11213
|
let randomMove = '';
|
|
11228
11214
|
if (moves.length) {
|
|
11229
11215
|
moves.sort((a, b) => a.num - b.num);
|
|
11230
|
-
randomMove = this.sample(moves).
|
|
11216
|
+
randomMove = this.sample(moves).id;
|
|
11231
11217
|
}
|
|
11232
|
-
if (!randomMove)
|
|
11218
|
+
if (!randomMove)
|
|
11233
11219
|
return false;
|
|
11234
|
-
}
|
|
11235
11220
|
this.actions.useMove(randomMove, target);
|
|
11236
11221
|
},
|
|
11237
11222
|
secondary: null,
|
|
@@ -16653,10 +16638,8 @@ exports.Moves = {
|
|
|
16653
16638
|
this.add('-sidestart', side, 'Spikes');
|
|
16654
16639
|
this.effectState.layers++;
|
|
16655
16640
|
},
|
|
16656
|
-
|
|
16657
|
-
if (!pokemon.isGrounded())
|
|
16658
|
-
return;
|
|
16659
|
-
if (pokemon.hasItem('heavydutyboots'))
|
|
16641
|
+
onEntryHazard(pokemon) {
|
|
16642
|
+
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots'))
|
|
16660
16643
|
return;
|
|
16661
16644
|
const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
|
|
16662
16645
|
this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
|
|
@@ -16948,7 +16931,7 @@ exports.Moves = {
|
|
|
16948
16931
|
onSideStart(side) {
|
|
16949
16932
|
this.add('-sidestart', side, 'move: Stealth Rock');
|
|
16950
16933
|
},
|
|
16951
|
-
|
|
16934
|
+
onEntryHazard(pokemon) {
|
|
16952
16935
|
if (pokemon.hasItem('heavydutyboots'))
|
|
16953
16936
|
return;
|
|
16954
16937
|
const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
|
|
@@ -17073,10 +17056,8 @@ exports.Moves = {
|
|
|
17073
17056
|
onSideStart(side) {
|
|
17074
17057
|
this.add('-sidestart', side, 'move: Sticky Web');
|
|
17075
17058
|
},
|
|
17076
|
-
|
|
17077
|
-
if (!pokemon.isGrounded())
|
|
17078
|
-
return;
|
|
17079
|
-
if (pokemon.hasItem('heavydutyboots'))
|
|
17059
|
+
onEntryHazard(pokemon) {
|
|
17060
|
+
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots'))
|
|
17080
17061
|
return;
|
|
17081
17062
|
this.add('-activate', pokemon, 'move: Sticky Web');
|
|
17082
17063
|
this.boost({ spe: -1 }, pokemon, this.effectState.source, this.dex.getActiveMove('stickyweb'));
|
|
@@ -18716,7 +18697,7 @@ exports.Moves = {
|
|
|
18716
18697
|
this.add('-sidestart', side, 'move: Toxic Spikes');
|
|
18717
18698
|
this.effectState.layers++;
|
|
18718
18699
|
},
|
|
18719
|
-
|
|
18700
|
+
onEntryHazard(pokemon) {
|
|
18720
18701
|
if (!pokemon.isGrounded())
|
|
18721
18702
|
return;
|
|
18722
18703
|
if (pokemon.hasType('Poison')) {
|