@pkmn/sim 0.8.3 → 0.8.5
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/cjs/config/formats.js +163 -212
- package/build/cjs/config/formats.js.map +1 -1
- package/build/cjs/data/abilities.js +370 -165
- package/build/cjs/data/abilities.js.map +1 -1
- package/build/cjs/data/conditions.js +0 -3
- package/build/cjs/data/conditions.js.map +1 -1
- package/build/cjs/data/formats-data.js +330 -312
- package/build/cjs/data/formats-data.js.map +1 -1
- package/build/cjs/data/items.js +2 -2
- package/build/cjs/data/items.js.map +1 -1
- package/build/cjs/data/legality.js +424 -104
- package/build/cjs/data/legality.js.map +1 -1
- package/build/cjs/data/mods/gen1/formats-data.js +22 -22
- package/build/cjs/data/mods/gen1/moves.js +6 -8
- package/build/cjs/data/mods/gen1/moves.js.map +1 -1
- package/build/cjs/data/mods/gen2/formats-data.js +43 -43
- package/build/cjs/data/mods/gen2/formats-data.js.map +1 -1
- package/build/cjs/data/mods/gen2/moves.js +4 -7
- package/build/cjs/data/mods/gen2/moves.js.map +1 -1
- package/build/cjs/data/mods/gen3/abilities.js +6 -5
- package/build/cjs/data/mods/gen3/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen3/formats-data.js +32 -32
- package/build/cjs/data/mods/gen3/formats-data.js.map +1 -1
- package/build/cjs/data/mods/gen3/moves.js +15 -10
- package/build/cjs/data/mods/gen3/moves.js.map +1 -1
- package/build/cjs/data/mods/gen3/scripts.js +11 -6
- package/build/cjs/data/mods/gen3/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen4/abilities.js +8 -2
- package/build/cjs/data/mods/gen4/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen4/moves.js +49 -45
- package/build/cjs/data/mods/gen4/moves.js.map +1 -1
- package/build/cjs/data/mods/gen4/scripts.js +11 -6
- package/build/cjs/data/mods/gen4/scripts.js.map +1 -1
- package/build/cjs/data/mods/gen5/abilities.js +1 -0
- package/build/cjs/data/mods/gen5/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen5/moves.js +44 -66
- package/build/cjs/data/mods/gen5/moves.js.map +1 -1
- package/build/cjs/data/mods/gen6/abilities.js +1 -1
- package/build/cjs/data/mods/gen6/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen6/moves.js +1 -1
- package/build/cjs/data/mods/gen6/moves.js.map +1 -1
- package/build/cjs/data/mods/gen7/abilities.js +2 -2
- package/build/cjs/data/mods/gen7/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen7/moves.js +21 -9
- package/build/cjs/data/mods/gen7/moves.js.map +1 -1
- package/build/cjs/data/mods/gen8/abilities.js +3 -1
- package/build/cjs/data/mods/gen8/abilities.js.map +1 -1
- package/build/cjs/data/mods/gen8/moves.js +6 -2
- package/build/cjs/data/mods/gen8/moves.js.map +1 -1
- package/build/cjs/data/moves.js +760 -770
- package/build/cjs/data/moves.js.map +1 -1
- package/build/cjs/data/rulesets.js +33 -56
- package/build/cjs/data/rulesets.js.map +1 -1
- package/build/cjs/data/text/abilities.js +34 -12
- package/build/cjs/data/text/abilities.js.map +1 -1
- package/build/cjs/data/text/moves.js +9 -9
- package/build/cjs/data/text/moves.js.map +1 -1
- package/build/cjs/sim/battle-actions.js +21 -21
- package/build/cjs/sim/battle-actions.js.map +1 -1
- package/build/cjs/sim/battle.js +4 -5
- package/build/cjs/sim/battle.js.map +1 -1
- package/build/cjs/sim/dex-abilities.d.ts +11 -2
- package/build/cjs/sim/dex-abilities.js +1 -0
- package/build/cjs/sim/dex-abilities.js.map +1 -1
- package/build/cjs/sim/dex-conditions.d.ts +6 -0
- package/build/cjs/sim/dex-conditions.js.map +1 -1
- package/build/cjs/sim/dex-formats.d.ts +2 -0
- package/build/cjs/sim/dex-formats.js +1 -0
- package/build/cjs/sim/dex-formats.js.map +1 -1
- package/build/cjs/sim/dex-moves.d.ts +1 -4
- package/build/cjs/sim/dex-moves.js +0 -1
- package/build/cjs/sim/dex-moves.js.map +1 -1
- package/build/cjs/sim/exported-global-types.d.ts +2 -2
- package/build/cjs/sim/global-types.d.ts +2 -2
- package/build/cjs/sim/pokemon.js +7 -4
- package/build/cjs/sim/pokemon.js.map +1 -1
- package/build/cjs/sim/team-validator.js +1 -1
- package/build/cjs/sim/team-validator.js.map +1 -1
- package/build/cjs/sim/tools/runner.js +1 -1
- package/build/cjs/sim/tools/runner.js.map +1 -1
- package/build/esm/config/formats.mjs +163 -212
- package/build/esm/config/formats.mjs.map +1 -1
- package/build/esm/data/abilities.mjs +370 -165
- package/build/esm/data/abilities.mjs.map +1 -1
- package/build/esm/data/conditions.mjs +0 -3
- package/build/esm/data/conditions.mjs.map +1 -1
- package/build/esm/data/formats-data.mjs +330 -312
- package/build/esm/data/formats-data.mjs.map +1 -1
- package/build/esm/data/items.mjs +2 -2
- package/build/esm/data/items.mjs.map +1 -1
- package/build/esm/data/legality.mjs +424 -104
- package/build/esm/data/legality.mjs.map +1 -1
- package/build/esm/data/mods/gen1/formats-data.mjs +22 -22
- package/build/esm/data/mods/gen1/moves.mjs +6 -8
- package/build/esm/data/mods/gen1/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen2/formats-data.mjs +43 -43
- package/build/esm/data/mods/gen2/formats-data.mjs.map +1 -1
- package/build/esm/data/mods/gen2/moves.mjs +4 -7
- package/build/esm/data/mods/gen2/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen3/abilities.mjs +6 -5
- package/build/esm/data/mods/gen3/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen3/formats-data.mjs +32 -32
- package/build/esm/data/mods/gen3/formats-data.mjs.map +1 -1
- package/build/esm/data/mods/gen3/moves.mjs +15 -10
- package/build/esm/data/mods/gen3/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen3/scripts.mjs +11 -6
- package/build/esm/data/mods/gen3/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen4/abilities.mjs +8 -2
- package/build/esm/data/mods/gen4/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen4/moves.mjs +49 -45
- package/build/esm/data/mods/gen4/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen4/scripts.mjs +11 -6
- package/build/esm/data/mods/gen4/scripts.mjs.map +1 -1
- package/build/esm/data/mods/gen5/abilities.mjs +1 -0
- package/build/esm/data/mods/gen5/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen5/moves.mjs +44 -66
- package/build/esm/data/mods/gen5/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen6/abilities.mjs +1 -1
- package/build/esm/data/mods/gen6/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen6/moves.mjs +1 -1
- package/build/esm/data/mods/gen6/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen7/abilities.mjs +2 -2
- package/build/esm/data/mods/gen7/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen7/moves.mjs +21 -9
- package/build/esm/data/mods/gen7/moves.mjs.map +1 -1
- package/build/esm/data/mods/gen8/abilities.mjs +3 -1
- package/build/esm/data/mods/gen8/abilities.mjs.map +1 -1
- package/build/esm/data/mods/gen8/moves.mjs +6 -2
- package/build/esm/data/mods/gen8/moves.mjs.map +1 -1
- package/build/esm/data/moves.mjs +760 -770
- package/build/esm/data/moves.mjs.map +1 -1
- package/build/esm/data/rulesets.mjs +33 -56
- package/build/esm/data/rulesets.mjs.map +1 -1
- package/build/esm/data/text/abilities.mjs +34 -12
- package/build/esm/data/text/abilities.mjs.map +1 -1
- package/build/esm/data/text/moves.mjs +9 -9
- package/build/esm/data/text/moves.mjs.map +1 -1
- package/build/esm/sim/battle-actions.mjs +21 -21
- package/build/esm/sim/battle-actions.mjs.map +1 -1
- package/build/esm/sim/battle.mjs +4 -5
- package/build/esm/sim/battle.mjs.map +1 -1
- package/build/esm/sim/dex-abilities.d.mts +11 -2
- package/build/esm/sim/dex-abilities.mjs +1 -0
- package/build/esm/sim/dex-abilities.mjs.map +1 -1
- package/build/esm/sim/dex-conditions.d.mts +6 -0
- package/build/esm/sim/dex-conditions.mjs.map +1 -1
- package/build/esm/sim/dex-formats.d.mts +2 -0
- package/build/esm/sim/dex-formats.mjs +1 -0
- package/build/esm/sim/dex-formats.mjs.map +1 -1
- package/build/esm/sim/dex-moves.d.mts +1 -4
- package/build/esm/sim/dex-moves.mjs +0 -1
- package/build/esm/sim/dex-moves.mjs.map +1 -1
- package/build/esm/sim/exported-global-types.d.mts +2 -2
- package/build/esm/sim/global-types.d.mts +2 -2
- package/build/esm/sim/pokemon.mjs +7 -4
- package/build/esm/sim/pokemon.mjs.map +1 -1
- package/build/esm/sim/team-validator.mjs +1 -1
- package/build/esm/sim/team-validator.mjs.map +1 -1
- package/build/esm/sim/tools/runner.mjs +1 -1
- package/build/esm/sim/tools/runner.mjs.map +1 -1
- package/package.json +1 -1
- package/build/types/config/formats.d.ts +0 -1
- package/build/types/data/abilities.d.ts +0 -3
- package/build/types/data/aliases.d.ts +0 -3
- package/build/types/data/conditions.d.ts +0 -3
- package/build/types/data/formats-data.d.ts +0 -3
- package/build/types/data/index.d.ts +0 -11
- package/build/types/data/items.d.ts +0 -3
- package/build/types/data/learnsets.d.ts +0 -3
- package/build/types/data/legality.d.ts +0 -3
- package/build/types/data/mods/gen1/conditions.d.ts +0 -12
- package/build/types/data/mods/gen1/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen1/index.d.ts +0 -7
- package/build/types/data/mods/gen1/moves.d.ts +0 -7
- package/build/types/data/mods/gen1/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen1/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen1/scripts.d.ts +0 -6
- package/build/types/data/mods/gen1/typechart.d.ts +0 -10
- package/build/types/data/mods/gen2/conditions.d.ts +0 -3
- package/build/types/data/mods/gen2/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen2/index.d.ts +0 -8
- package/build/types/data/mods/gen2/items.d.ts +0 -3
- package/build/types/data/mods/gen2/learnsets.d.ts +0 -3
- package/build/types/data/mods/gen2/legality.d.ts +0 -3
- package/build/types/data/mods/gen2/moves.d.ts +0 -6
- package/build/types/data/mods/gen2/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen2/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen2/scripts.d.ts +0 -4
- package/build/types/data/mods/gen2/typechart.d.ts +0 -3
- package/build/types/data/mods/gen3/abilities.d.ts +0 -3
- package/build/types/data/mods/gen3/conditions.d.ts +0 -3
- package/build/types/data/mods/gen3/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen3/index.d.ts +0 -7
- package/build/types/data/mods/gen3/items.d.ts +0 -3
- package/build/types/data/mods/gen3/moves.d.ts +0 -6
- package/build/types/data/mods/gen3/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen3/scripts.d.ts +0 -1
- package/build/types/data/mods/gen4/abilities.d.ts +0 -3
- package/build/types/data/mods/gen4/conditions.d.ts +0 -3
- package/build/types/data/mods/gen4/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen4/index.d.ts +0 -8
- package/build/types/data/mods/gen4/items.d.ts +0 -3
- package/build/types/data/mods/gen4/moves.d.ts +0 -3
- package/build/types/data/mods/gen4/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen4/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen4/scripts.d.ts +0 -1
- package/build/types/data/mods/gen5/abilities.d.ts +0 -3
- package/build/types/data/mods/gen5/conditions.d.ts +0 -3
- package/build/types/data/mods/gen5/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen5/index.d.ts +0 -9
- package/build/types/data/mods/gen5/items.d.ts +0 -3
- package/build/types/data/mods/gen5/moves.d.ts +0 -3
- package/build/types/data/mods/gen5/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen5/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen5/scripts.d.ts +0 -1
- package/build/types/data/mods/gen5/typechart.d.ts +0 -3
- package/build/types/data/mods/gen6/abilities.d.ts +0 -3
- package/build/types/data/mods/gen6/conditions.d.ts +0 -3
- package/build/types/data/mods/gen6/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen6/index.d.ts +0 -8
- package/build/types/data/mods/gen6/items.d.ts +0 -3
- package/build/types/data/mods/gen6/learnsets.d.ts +0 -3
- package/build/types/data/mods/gen6/legality.d.ts +0 -3
- package/build/types/data/mods/gen6/moves.d.ts +0 -3
- package/build/types/data/mods/gen6/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen6/scripts.d.ts +0 -1
- package/build/types/data/mods/gen6/typechart.d.ts +0 -3
- package/build/types/data/mods/gen7/abilities.d.ts +0 -3
- package/build/types/data/mods/gen7/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen7/index.d.ts +0 -7
- package/build/types/data/mods/gen7/items.d.ts +0 -3
- package/build/types/data/mods/gen7/moves.d.ts +0 -3
- package/build/types/data/mods/gen7/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen7/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen7/scripts.d.ts +0 -1
- package/build/types/data/mods/gen8/abilities.d.ts +0 -3
- package/build/types/data/mods/gen8/formats-data.d.ts +0 -3
- package/build/types/data/mods/gen8/index.d.ts +0 -7
- package/build/types/data/mods/gen8/items.d.ts +0 -3
- package/build/types/data/mods/gen8/learnsets.d.ts +0 -3
- package/build/types/data/mods/gen8/legality.d.ts +0 -3
- package/build/types/data/mods/gen8/moves.d.ts +0 -3
- package/build/types/data/mods/gen8/pokedex.d.ts +0 -3
- package/build/types/data/mods/gen8/rulesets.d.ts +0 -3
- package/build/types/data/mods/gen8/scripts.d.ts +0 -1
- package/build/types/data/moves.d.ts +0 -3
- package/build/types/data/natures.d.ts +0 -3
- package/build/types/data/pokedex.d.ts +0 -3
- package/build/types/data/pokemongo.d.ts +0 -31
- package/build/types/data/rulesets.d.ts +0 -3
- package/build/types/data/scripts.d.ts +0 -1
- package/build/types/data/tags.d.ts +0 -15
- package/build/types/data/text/abilities.d.ts +0 -3
- package/build/types/data/text/default.d.ts +0 -3
- package/build/types/data/text/items.d.ts +0 -3
- package/build/types/data/text/moves.d.ts +0 -3
- package/build/types/data/typechart.d.ts +0 -3
- package/build/types/lib/index.d.ts +0 -2
- package/build/types/lib/streams.d.ts +0 -1
- package/build/types/lib/utils.d.ts +0 -139
- package/build/types/sim/battle-actions.d.ts +0 -90
- package/build/types/sim/battle-queue.d.ts +0 -164
- package/build/types/sim/battle-stream.d.ts +0 -67
- package/build/types/sim/battle.d.ts +0 -396
- package/build/types/sim/dex-abilities.d.ts +0 -35
- package/build/types/sim/dex-conditions.d.ts +0 -518
- package/build/types/sim/dex-data.d.ts +0 -169
- package/build/types/sim/dex-formats.d.ts +0 -170
- package/build/types/sim/dex-items.d.ts +0 -110
- package/build/types/sim/dex-moves.d.ts +0 -441
- package/build/types/sim/dex-species.d.ts +0 -289
- package/build/types/sim/dex.d.ts +0 -162
- package/build/types/sim/exported-global-types.d.ts +0 -510
- package/build/types/sim/field.d.ts +0 -30
- package/build/types/sim/global-types.d.ts +0 -510
- package/build/types/sim/index.d.ts +0 -13
- package/build/types/sim/pokemon.d.ts +0 -427
- package/build/types/sim/prng.d.ts +0 -97
- package/build/types/sim/side.d.ts +0 -127
- package/build/types/sim/state.d.ts +0 -42
- package/build/types/sim/team-validator.d.ts +0 -198
- package/build/types/sim/teams.d.ts +0 -26
- package/build/types/sim/tools/exhaustive-runner.d.ts +0 -52
- package/build/types/sim/tools/index.d.ts +0 -2
- package/build/types/sim/tools/random-player-ai.d.ts +0 -32
- package/build/types/sim/tools/runner.d.ts +0 -41
|
@@ -34,14 +34,21 @@ Ratings and how they work:
|
|
|
34
34
|
export const Abilities = {
|
|
35
35
|
noability: {
|
|
36
36
|
isNonstandard: "Past",
|
|
37
|
+
flags: {},
|
|
37
38
|
name: "No Ability",
|
|
38
39
|
rating: 0.1,
|
|
39
40
|
num: 0,
|
|
40
41
|
},
|
|
41
42
|
adaptability: {
|
|
42
|
-
|
|
43
|
-
move.
|
|
43
|
+
onModifySTAB(stab, source, target, move) {
|
|
44
|
+
if (move.forceSTAB || source.hasType(move.type)) {
|
|
45
|
+
if (stab === 2) {
|
|
46
|
+
return 2.25;
|
|
47
|
+
}
|
|
48
|
+
return 2;
|
|
49
|
+
}
|
|
44
50
|
},
|
|
51
|
+
flags: {},
|
|
45
52
|
name: "Adaptability",
|
|
46
53
|
rating: 4,
|
|
47
54
|
num: 91,
|
|
@@ -63,18 +70,20 @@ export const Abilities = {
|
|
|
63
70
|
if (move.typeChangerBoosted === this.effect)
|
|
64
71
|
return this.chainModify([4915, 4096]);
|
|
65
72
|
},
|
|
73
|
+
flags: {},
|
|
66
74
|
name: "Aerilate",
|
|
67
75
|
rating: 4,
|
|
68
76
|
num: 184,
|
|
69
77
|
},
|
|
70
78
|
aftermath: {
|
|
71
|
-
name: "Aftermath",
|
|
72
79
|
onDamagingHitOrder: 1,
|
|
73
80
|
onDamagingHit(damage, target, source, move) {
|
|
74
81
|
if (!target.hp && this.checkMoveMakesContact(move, source, target, true)) {
|
|
75
82
|
this.damage(source.baseMaxhp / 4, source, target);
|
|
76
83
|
}
|
|
77
84
|
},
|
|
85
|
+
flags: {},
|
|
86
|
+
name: "Aftermath",
|
|
78
87
|
rating: 2,
|
|
79
88
|
num: 106,
|
|
80
89
|
},
|
|
@@ -94,6 +103,7 @@ export const Abilities = {
|
|
|
94
103
|
this.eachEvent('WeatherChange', this.effect);
|
|
95
104
|
},
|
|
96
105
|
suppressWeather: true,
|
|
106
|
+
flags: {},
|
|
97
107
|
name: "Air Lock",
|
|
98
108
|
rating: 1.5,
|
|
99
109
|
num: 76,
|
|
@@ -115,6 +125,7 @@ export const Abilities = {
|
|
|
115
125
|
return this.chainModify([5325, 4096]);
|
|
116
126
|
}
|
|
117
127
|
},
|
|
128
|
+
flags: {},
|
|
118
129
|
name: "Analytic",
|
|
119
130
|
rating: 2.5,
|
|
120
131
|
num: 148,
|
|
@@ -127,6 +138,7 @@ export const Abilities = {
|
|
|
127
138
|
this.boost({ atk: 12 }, target, target);
|
|
128
139
|
}
|
|
129
140
|
},
|
|
141
|
+
flags: {},
|
|
130
142
|
name: "Anger Point",
|
|
131
143
|
rating: 1,
|
|
132
144
|
num: 83,
|
|
@@ -163,6 +175,7 @@ export const Abilities = {
|
|
|
163
175
|
this.boost({ atk: 1, spa: 1, spe: 1, def: -1, spd: -1 }, target, target);
|
|
164
176
|
}
|
|
165
177
|
},
|
|
178
|
+
flags: {},
|
|
166
179
|
name: "Anger Shell",
|
|
167
180
|
rating: 3,
|
|
168
181
|
num: 271,
|
|
@@ -183,6 +196,7 @@ export const Abilities = {
|
|
|
183
196
|
}
|
|
184
197
|
}
|
|
185
198
|
},
|
|
199
|
+
flags: {},
|
|
186
200
|
name: "Anticipation",
|
|
187
201
|
rating: 0.5,
|
|
188
202
|
num: 107,
|
|
@@ -204,6 +218,7 @@ export const Abilities = {
|
|
|
204
218
|
pokemon.maybeTrapped = true;
|
|
205
219
|
}
|
|
206
220
|
},
|
|
221
|
+
flags: {},
|
|
207
222
|
name: "Arena Trap",
|
|
208
223
|
rating: 5,
|
|
209
224
|
num: 71,
|
|
@@ -221,7 +236,7 @@ export const Abilities = {
|
|
|
221
236
|
return false;
|
|
222
237
|
}
|
|
223
238
|
},
|
|
224
|
-
|
|
239
|
+
flags: { breakable: 1 },
|
|
225
240
|
name: "Armor Tail",
|
|
226
241
|
rating: 2.5,
|
|
227
242
|
num: 296,
|
|
@@ -236,7 +251,7 @@ export const Abilities = {
|
|
|
236
251
|
return null;
|
|
237
252
|
}
|
|
238
253
|
},
|
|
239
|
-
|
|
254
|
+
flags: { breakable: 1 },
|
|
240
255
|
name: "Aroma Veil",
|
|
241
256
|
rating: 2,
|
|
242
257
|
num: 165,
|
|
@@ -258,7 +273,7 @@ export const Abilities = {
|
|
|
258
273
|
this.boost({ atk: length }, source, source, this.dex.abilities.get('chillingneigh'));
|
|
259
274
|
}
|
|
260
275
|
},
|
|
261
|
-
|
|
276
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
262
277
|
name: "As One (Glastrier)",
|
|
263
278
|
rating: 3.5,
|
|
264
279
|
num: 266,
|
|
@@ -280,7 +295,7 @@ export const Abilities = {
|
|
|
280
295
|
this.boost({ spa: length }, source, source, this.dex.abilities.get('grimneigh'));
|
|
281
296
|
}
|
|
282
297
|
},
|
|
283
|
-
|
|
298
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
284
299
|
name: "As One (Spectrier)",
|
|
285
300
|
rating: 3.5,
|
|
286
301
|
num: 267,
|
|
@@ -296,7 +311,7 @@ export const Abilities = {
|
|
|
296
311
|
return;
|
|
297
312
|
move.hasAuraBreak = true;
|
|
298
313
|
},
|
|
299
|
-
|
|
314
|
+
flags: { breakable: 1 },
|
|
300
315
|
name: "Aura Break",
|
|
301
316
|
rating: 1,
|
|
302
317
|
num: 188,
|
|
@@ -313,11 +328,13 @@ export const Abilities = {
|
|
|
313
328
|
}
|
|
314
329
|
}
|
|
315
330
|
},
|
|
331
|
+
flags: {},
|
|
316
332
|
name: "Bad Dreams",
|
|
317
333
|
rating: 1.5,
|
|
318
334
|
num: 123,
|
|
319
335
|
},
|
|
320
336
|
ballfetch: {
|
|
337
|
+
flags: {},
|
|
321
338
|
name: "Ball Fetch",
|
|
322
339
|
rating: 0,
|
|
323
340
|
num: 237,
|
|
@@ -330,13 +347,14 @@ export const Abilities = {
|
|
|
330
347
|
return this.chainModify([5325, 4096]);
|
|
331
348
|
}
|
|
332
349
|
},
|
|
350
|
+
flags: {},
|
|
333
351
|
name: "Battery",
|
|
334
352
|
rating: 0,
|
|
335
353
|
num: 217,
|
|
336
354
|
},
|
|
337
355
|
battlearmor: {
|
|
338
356
|
onCriticalHit: false,
|
|
339
|
-
|
|
357
|
+
flags: { breakable: 1 },
|
|
340
358
|
name: "Battle Armor",
|
|
341
359
|
rating: 1,
|
|
342
360
|
num: 4,
|
|
@@ -353,7 +371,7 @@ export const Abilities = {
|
|
|
353
371
|
source.abilityState.battleBondTriggered = true;
|
|
354
372
|
}
|
|
355
373
|
},
|
|
356
|
-
|
|
374
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
357
375
|
name: "Battle Bond",
|
|
358
376
|
rating: 3.5,
|
|
359
377
|
num: 210,
|
|
@@ -375,6 +393,7 @@ export const Abilities = {
|
|
|
375
393
|
this.debug('Beads of Ruin SpD drop');
|
|
376
394
|
return this.chainModify(0.75);
|
|
377
395
|
},
|
|
396
|
+
flags: {},
|
|
378
397
|
name: "Beads of Ruin",
|
|
379
398
|
rating: 4.5,
|
|
380
399
|
num: 284,
|
|
@@ -386,6 +405,7 @@ export const Abilities = {
|
|
|
386
405
|
this.boost({ [bestStat]: length }, source);
|
|
387
406
|
}
|
|
388
407
|
},
|
|
408
|
+
flags: {},
|
|
389
409
|
name: "Beast Boost",
|
|
390
410
|
rating: 3.5,
|
|
391
411
|
num: 224,
|
|
@@ -422,6 +442,7 @@ export const Abilities = {
|
|
|
422
442
|
this.boost({ spa: 1 }, target, target);
|
|
423
443
|
}
|
|
424
444
|
},
|
|
445
|
+
flags: {},
|
|
425
446
|
name: "Berserk",
|
|
426
447
|
rating: 2,
|
|
427
448
|
num: 201,
|
|
@@ -437,7 +458,7 @@ export const Abilities = {
|
|
|
437
458
|
}
|
|
438
459
|
}
|
|
439
460
|
},
|
|
440
|
-
|
|
461
|
+
flags: { breakable: 1 },
|
|
441
462
|
name: "Big Pecks",
|
|
442
463
|
rating: 0.5,
|
|
443
464
|
num: 145,
|
|
@@ -457,6 +478,7 @@ export const Abilities = {
|
|
|
457
478
|
return this.chainModify(1.5);
|
|
458
479
|
}
|
|
459
480
|
},
|
|
481
|
+
flags: {},
|
|
460
482
|
name: "Blaze",
|
|
461
483
|
rating: 2,
|
|
462
484
|
num: 66,
|
|
@@ -468,7 +490,7 @@ export const Abilities = {
|
|
|
468
490
|
return null;
|
|
469
491
|
}
|
|
470
492
|
},
|
|
471
|
-
|
|
493
|
+
flags: { breakable: 1 },
|
|
472
494
|
name: "Bulletproof",
|
|
473
495
|
rating: 3,
|
|
474
496
|
num: 171,
|
|
@@ -477,6 +499,7 @@ export const Abilities = {
|
|
|
477
499
|
onEatItem(item, pokemon) {
|
|
478
500
|
this.heal(pokemon.baseMaxhp / 3);
|
|
479
501
|
},
|
|
502
|
+
flags: {},
|
|
480
503
|
name: "Cheek Pouch",
|
|
481
504
|
rating: 2,
|
|
482
505
|
num: 167,
|
|
@@ -487,6 +510,7 @@ export const Abilities = {
|
|
|
487
510
|
this.boost({ atk: length }, source);
|
|
488
511
|
}
|
|
489
512
|
},
|
|
513
|
+
flags: {},
|
|
490
514
|
name: "Chilling Neigh",
|
|
491
515
|
rating: 3,
|
|
492
516
|
num: 264,
|
|
@@ -497,6 +521,7 @@ export const Abilities = {
|
|
|
497
521
|
return this.chainModify(2);
|
|
498
522
|
}
|
|
499
523
|
},
|
|
524
|
+
flags: {},
|
|
500
525
|
name: "Chlorophyll",
|
|
501
526
|
rating: 3,
|
|
502
527
|
num: 34,
|
|
@@ -517,7 +542,7 @@ export const Abilities = {
|
|
|
517
542
|
this.add("-fail", target, "unboost", "[from] ability: Clear Body", "[of] " + target);
|
|
518
543
|
}
|
|
519
544
|
},
|
|
520
|
-
|
|
545
|
+
flags: { breakable: 1 },
|
|
521
546
|
name: "Clear Body",
|
|
522
547
|
rating: 2,
|
|
523
548
|
num: 29,
|
|
@@ -538,6 +563,7 @@ export const Abilities = {
|
|
|
538
563
|
this.eachEvent('WeatherChange', this.effect);
|
|
539
564
|
},
|
|
540
565
|
suppressWeather: true,
|
|
566
|
+
flags: {},
|
|
541
567
|
name: "Cloud Nine",
|
|
542
568
|
rating: 1.5,
|
|
543
569
|
num: 13,
|
|
@@ -561,6 +587,7 @@ export const Abilities = {
|
|
|
561
587
|
}
|
|
562
588
|
}
|
|
563
589
|
},
|
|
590
|
+
flags: {},
|
|
564
591
|
name: "Color Change",
|
|
565
592
|
rating: 0,
|
|
566
593
|
num: 16,
|
|
@@ -576,7 +603,7 @@ export const Abilities = {
|
|
|
576
603
|
return false;
|
|
577
604
|
},
|
|
578
605
|
// Permanent sleep "status" implemented in the relevant sleep-checking effects
|
|
579
|
-
|
|
606
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
580
607
|
name: "Comatose",
|
|
581
608
|
rating: 4,
|
|
582
609
|
num: 213,
|
|
@@ -586,8 +613,7 @@ export const Abilities = {
|
|
|
586
613
|
if (this.gameType !== 'doubles')
|
|
587
614
|
return;
|
|
588
615
|
const ally = pokemon.allies()[0];
|
|
589
|
-
if (!ally || pokemon.
|
|
590
|
-
pokemon.baseSpecies.baseSpecies !== 'Tatsugiri' || ally.baseSpecies.baseSpecies !== 'Dondozo') {
|
|
616
|
+
if (!ally || pokemon.baseSpecies.baseSpecies !== 'Tatsugiri' || ally.baseSpecies.baseSpecies !== 'Dondozo') {
|
|
591
617
|
// Handle any edge cases
|
|
592
618
|
if (pokemon.getVolatile('commanding'))
|
|
593
619
|
pokemon.removeVolatile('commanding');
|
|
@@ -611,6 +637,7 @@ export const Abilities = {
|
|
|
611
637
|
pokemon.removeVolatile('commanding');
|
|
612
638
|
}
|
|
613
639
|
},
|
|
640
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 },
|
|
614
641
|
name: "Commander",
|
|
615
642
|
rating: 0,
|
|
616
643
|
num: 279,
|
|
@@ -634,6 +661,7 @@ export const Abilities = {
|
|
|
634
661
|
this.boost({ spa: 2 }, target, target, null, false, true);
|
|
635
662
|
}
|
|
636
663
|
},
|
|
664
|
+
flags: {},
|
|
637
665
|
name: "Competitive",
|
|
638
666
|
rating: 2.5,
|
|
639
667
|
num: 172,
|
|
@@ -646,6 +674,7 @@ export const Abilities = {
|
|
|
646
674
|
this.debug('compoundeyes - enhancing accuracy');
|
|
647
675
|
return this.chainModify([5325, 4096]);
|
|
648
676
|
},
|
|
677
|
+
flags: {},
|
|
649
678
|
name: "Compound Eyes",
|
|
650
679
|
rating: 3,
|
|
651
680
|
num: 14,
|
|
@@ -659,13 +688,14 @@ export const Abilities = {
|
|
|
659
688
|
boost[i] *= -1;
|
|
660
689
|
}
|
|
661
690
|
},
|
|
662
|
-
|
|
691
|
+
flags: { breakable: 1 },
|
|
663
692
|
name: "Contrary",
|
|
664
693
|
rating: 4.5,
|
|
665
694
|
num: 126,
|
|
666
695
|
},
|
|
667
696
|
corrosion: {
|
|
668
697
|
// Implemented in sim/pokemon.js:Pokemon#setStatus
|
|
698
|
+
flags: {},
|
|
669
699
|
name: "Corrosion",
|
|
670
700
|
rating: 2.5,
|
|
671
701
|
num: 212,
|
|
@@ -692,6 +722,7 @@ export const Abilities = {
|
|
|
692
722
|
}
|
|
693
723
|
this.add('-copyboost', pokemon, ally, '[from] ability: Costar');
|
|
694
724
|
},
|
|
725
|
+
flags: {},
|
|
695
726
|
name: "Costar",
|
|
696
727
|
rating: 0,
|
|
697
728
|
num: 294,
|
|
@@ -709,6 +740,7 @@ export const Abilities = {
|
|
|
709
740
|
this.boost({ spe: -1 }, pokemon, target, null, true);
|
|
710
741
|
}
|
|
711
742
|
},
|
|
743
|
+
flags: {},
|
|
712
744
|
name: "Cotton Down",
|
|
713
745
|
rating: 2,
|
|
714
746
|
num: 238,
|
|
@@ -743,6 +775,7 @@ export const Abilities = {
|
|
|
743
775
|
}
|
|
744
776
|
},
|
|
745
777
|
},
|
|
778
|
+
flags: {},
|
|
746
779
|
name: "Cud Chew",
|
|
747
780
|
rating: 2,
|
|
748
781
|
num: 291,
|
|
@@ -754,6 +787,7 @@ export const Abilities = {
|
|
|
754
787
|
this.add('-clearboost', ally, '[from] ability: Curious Medicine', '[of] ' + pokemon);
|
|
755
788
|
}
|
|
756
789
|
},
|
|
790
|
+
flags: {},
|
|
757
791
|
name: "Curious Medicine",
|
|
758
792
|
rating: 0,
|
|
759
793
|
num: 261,
|
|
@@ -768,6 +802,7 @@ export const Abilities = {
|
|
|
768
802
|
}
|
|
769
803
|
}
|
|
770
804
|
},
|
|
805
|
+
flags: {},
|
|
771
806
|
name: "Cursed Body",
|
|
772
807
|
rating: 2,
|
|
773
808
|
num: 130,
|
|
@@ -780,6 +815,7 @@ export const Abilities = {
|
|
|
780
815
|
}
|
|
781
816
|
}
|
|
782
817
|
},
|
|
818
|
+
flags: {},
|
|
783
819
|
name: "Cute Charm",
|
|
784
820
|
rating: 0.5,
|
|
785
821
|
num: 56,
|
|
@@ -797,12 +833,13 @@ export const Abilities = {
|
|
|
797
833
|
return false;
|
|
798
834
|
}
|
|
799
835
|
},
|
|
800
|
-
|
|
836
|
+
flags: { breakable: 1 },
|
|
801
837
|
name: "Damp",
|
|
802
838
|
rating: 0.5,
|
|
803
839
|
num: 6,
|
|
804
840
|
},
|
|
805
841
|
dancer: {
|
|
842
|
+
flags: {},
|
|
806
843
|
name: "Dancer",
|
|
807
844
|
// implemented in runMove in scripts.js
|
|
808
845
|
rating: 1.5,
|
|
@@ -824,6 +861,7 @@ export const Abilities = {
|
|
|
824
861
|
return;
|
|
825
862
|
return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]);
|
|
826
863
|
},
|
|
864
|
+
flags: {},
|
|
827
865
|
name: "Dark Aura",
|
|
828
866
|
rating: 3,
|
|
829
867
|
num: 186,
|
|
@@ -835,6 +873,7 @@ export const Abilities = {
|
|
|
835
873
|
pokemon.shieldBoost = true;
|
|
836
874
|
this.boost({ def: 1 }, pokemon);
|
|
837
875
|
},
|
|
876
|
+
flags: {},
|
|
838
877
|
name: "Dauntless Shield",
|
|
839
878
|
rating: 3.5,
|
|
840
879
|
num: 235,
|
|
@@ -852,7 +891,7 @@ export const Abilities = {
|
|
|
852
891
|
return false;
|
|
853
892
|
}
|
|
854
893
|
},
|
|
855
|
-
|
|
894
|
+
flags: { breakable: 1 },
|
|
856
895
|
name: "Dazzling",
|
|
857
896
|
rating: 2.5,
|
|
858
897
|
num: 219,
|
|
@@ -870,6 +909,7 @@ export const Abilities = {
|
|
|
870
909
|
return this.chainModify(0.5);
|
|
871
910
|
}
|
|
872
911
|
},
|
|
912
|
+
flags: {},
|
|
873
913
|
name: "Defeatist",
|
|
874
914
|
rating: -1,
|
|
875
915
|
num: 129,
|
|
@@ -893,6 +933,7 @@ export const Abilities = {
|
|
|
893
933
|
this.boost({ atk: 2 }, target, target, null, false, true);
|
|
894
934
|
}
|
|
895
935
|
},
|
|
936
|
+
flags: {},
|
|
896
937
|
name: "Defiant",
|
|
897
938
|
rating: 3,
|
|
898
939
|
num: 128,
|
|
@@ -919,6 +960,7 @@ export const Abilities = {
|
|
|
919
960
|
}
|
|
920
961
|
this.field.clearWeather();
|
|
921
962
|
},
|
|
963
|
+
flags: {},
|
|
922
964
|
name: "Delta Stream",
|
|
923
965
|
rating: 4,
|
|
924
966
|
num: 191,
|
|
@@ -945,6 +987,7 @@ export const Abilities = {
|
|
|
945
987
|
}
|
|
946
988
|
this.field.clearWeather();
|
|
947
989
|
},
|
|
990
|
+
flags: {},
|
|
948
991
|
name: "Desolate Land",
|
|
949
992
|
rating: 4.5,
|
|
950
993
|
num: 190,
|
|
@@ -952,8 +995,7 @@ export const Abilities = {
|
|
|
952
995
|
disguise: {
|
|
953
996
|
onDamagePriority: 1,
|
|
954
997
|
onDamage(damage, target, source, effect) {
|
|
955
|
-
if (effect
|
|
956
|
-
['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed) {
|
|
998
|
+
if (effect?.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.species.id)) {
|
|
957
999
|
this.add('-activate', target, 'ability: Disguise');
|
|
958
1000
|
this.effectState.busted = true;
|
|
959
1001
|
return 0;
|
|
@@ -962,7 +1004,7 @@ export const Abilities = {
|
|
|
962
1004
|
onCriticalHit(target, source, move) {
|
|
963
1005
|
if (!target)
|
|
964
1006
|
return;
|
|
965
|
-
if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)
|
|
1007
|
+
if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) {
|
|
966
1008
|
return;
|
|
967
1009
|
}
|
|
968
1010
|
const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);
|
|
@@ -975,7 +1017,7 @@ export const Abilities = {
|
|
|
975
1017
|
onEffectiveness(typeMod, target, type, move) {
|
|
976
1018
|
if (!target || move.category === 'Status')
|
|
977
1019
|
return;
|
|
978
|
-
if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)
|
|
1020
|
+
if (!['mimikyu', 'mimikyutotem'].includes(target.species.id)) {
|
|
979
1021
|
return;
|
|
980
1022
|
}
|
|
981
1023
|
const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);
|
|
@@ -992,8 +1034,10 @@ export const Abilities = {
|
|
|
992
1034
|
this.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid));
|
|
993
1035
|
}
|
|
994
1036
|
},
|
|
995
|
-
|
|
996
|
-
|
|
1037
|
+
flags: {
|
|
1038
|
+
failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1,
|
|
1039
|
+
breakable: 1, notransform: 1,
|
|
1040
|
+
},
|
|
997
1041
|
name: "Disguise",
|
|
998
1042
|
rating: 3.5,
|
|
999
1043
|
num: 209,
|
|
@@ -1013,6 +1057,7 @@ export const Abilities = {
|
|
|
1013
1057
|
this.boost({ atk: 1 });
|
|
1014
1058
|
}
|
|
1015
1059
|
},
|
|
1060
|
+
flags: {},
|
|
1016
1061
|
name: "Download",
|
|
1017
1062
|
rating: 3.5,
|
|
1018
1063
|
num: 88,
|
|
@@ -1032,6 +1077,7 @@ export const Abilities = {
|
|
|
1032
1077
|
return this.chainModify(1.5);
|
|
1033
1078
|
}
|
|
1034
1079
|
},
|
|
1080
|
+
flags: {},
|
|
1035
1081
|
name: "Dragon's Maw",
|
|
1036
1082
|
rating: 3.5,
|
|
1037
1083
|
num: 263,
|
|
@@ -1046,6 +1092,7 @@ export const Abilities = {
|
|
|
1046
1092
|
}
|
|
1047
1093
|
this.field.setWeather('raindance');
|
|
1048
1094
|
},
|
|
1095
|
+
flags: {},
|
|
1049
1096
|
name: "Drizzle",
|
|
1050
1097
|
rating: 4,
|
|
1051
1098
|
num: 2,
|
|
@@ -1060,6 +1107,7 @@ export const Abilities = {
|
|
|
1060
1107
|
}
|
|
1061
1108
|
this.field.setWeather('sunnyday');
|
|
1062
1109
|
},
|
|
1110
|
+
flags: {},
|
|
1063
1111
|
name: "Drought",
|
|
1064
1112
|
rating: 4,
|
|
1065
1113
|
num: 70,
|
|
@@ -1089,12 +1137,13 @@ export const Abilities = {
|
|
|
1089
1137
|
this.damage(target.baseMaxhp / 8, target, target);
|
|
1090
1138
|
}
|
|
1091
1139
|
},
|
|
1092
|
-
|
|
1140
|
+
flags: { breakable: 1 },
|
|
1093
1141
|
name: "Dry Skin",
|
|
1094
1142
|
rating: 3,
|
|
1095
1143
|
num: 87,
|
|
1096
1144
|
},
|
|
1097
1145
|
earlybird: {
|
|
1146
|
+
flags: {},
|
|
1098
1147
|
name: "Early Bird",
|
|
1099
1148
|
// Implemented in statuses.js
|
|
1100
1149
|
rating: 1.5,
|
|
@@ -1109,7 +1158,7 @@ export const Abilities = {
|
|
|
1109
1158
|
return null;
|
|
1110
1159
|
}
|
|
1111
1160
|
},
|
|
1112
|
-
|
|
1161
|
+
flags: { breakable: 1 },
|
|
1113
1162
|
name: "Earth Eater",
|
|
1114
1163
|
rating: 3.5,
|
|
1115
1164
|
num: 297,
|
|
@@ -1129,6 +1178,7 @@ export const Abilities = {
|
|
|
1129
1178
|
}
|
|
1130
1179
|
}
|
|
1131
1180
|
},
|
|
1181
|
+
flags: {},
|
|
1132
1182
|
name: "Effect Spore",
|
|
1133
1183
|
rating: 2,
|
|
1134
1184
|
num: 27,
|
|
@@ -1137,6 +1187,7 @@ export const Abilities = {
|
|
|
1137
1187
|
onStart(source) {
|
|
1138
1188
|
this.field.setTerrain('electricterrain');
|
|
1139
1189
|
},
|
|
1190
|
+
flags: {},
|
|
1140
1191
|
name: "Electric Surge",
|
|
1141
1192
|
rating: 4,
|
|
1142
1193
|
num: 226,
|
|
@@ -1146,13 +1197,14 @@ export const Abilities = {
|
|
|
1146
1197
|
onDamagingHit(damage, target, source, move) {
|
|
1147
1198
|
target.addVolatile('charge');
|
|
1148
1199
|
},
|
|
1200
|
+
flags: {},
|
|
1149
1201
|
name: "Electromorphosis",
|
|
1150
1202
|
rating: 3,
|
|
1151
1203
|
num: 280,
|
|
1152
1204
|
},
|
|
1153
1205
|
embodyaspectcornerstone: {
|
|
1154
1206
|
onStart(pokemon) {
|
|
1155
|
-
if (pokemon.baseSpecies.name === 'Ogerpon-Cornerstone-Tera' && !
|
|
1207
|
+
if (pokemon.baseSpecies.name === 'Ogerpon-Cornerstone-Tera' && !this.effectState.embodied) {
|
|
1156
1208
|
this.effectState.embodied = true;
|
|
1157
1209
|
this.boost({ def: 1 }, pokemon);
|
|
1158
1210
|
}
|
|
@@ -1160,13 +1212,14 @@ export const Abilities = {
|
|
|
1160
1212
|
onSwitchIn() {
|
|
1161
1213
|
delete this.effectState.embodied;
|
|
1162
1214
|
},
|
|
1215
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
1163
1216
|
name: "Embody Aspect (Cornerstone)",
|
|
1164
1217
|
rating: 3.5,
|
|
1165
1218
|
num: 304,
|
|
1166
1219
|
},
|
|
1167
1220
|
embodyaspecthearthflame: {
|
|
1168
1221
|
onStart(pokemon) {
|
|
1169
|
-
if (pokemon.baseSpecies.name === 'Ogerpon-Hearthflame-Tera' && !
|
|
1222
|
+
if (pokemon.baseSpecies.name === 'Ogerpon-Hearthflame-Tera' && !this.effectState.embodied) {
|
|
1170
1223
|
this.effectState.embodied = true;
|
|
1171
1224
|
this.boost({ atk: 1 }, pokemon);
|
|
1172
1225
|
}
|
|
@@ -1174,13 +1227,14 @@ export const Abilities = {
|
|
|
1174
1227
|
onSwitchIn() {
|
|
1175
1228
|
delete this.effectState.embodied;
|
|
1176
1229
|
},
|
|
1230
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
1177
1231
|
name: "Embody Aspect (Hearthflame)",
|
|
1178
1232
|
rating: 3.5,
|
|
1179
1233
|
num: 303,
|
|
1180
1234
|
},
|
|
1181
1235
|
embodyaspectteal: {
|
|
1182
1236
|
onStart(pokemon) {
|
|
1183
|
-
if (pokemon.baseSpecies.name === 'Ogerpon-Teal-Tera' && !
|
|
1237
|
+
if (pokemon.baseSpecies.name === 'Ogerpon-Teal-Tera' && !this.effectState.embodied) {
|
|
1184
1238
|
this.effectState.embodied = true;
|
|
1185
1239
|
this.boost({ spe: 1 }, pokemon);
|
|
1186
1240
|
}
|
|
@@ -1188,13 +1242,14 @@ export const Abilities = {
|
|
|
1188
1242
|
onSwitchIn() {
|
|
1189
1243
|
delete this.effectState.embodied;
|
|
1190
1244
|
},
|
|
1245
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
1191
1246
|
name: "Embody Aspect (Teal)",
|
|
1192
1247
|
rating: 3.5,
|
|
1193
1248
|
num: 301,
|
|
1194
1249
|
},
|
|
1195
1250
|
embodyaspectwellspring: {
|
|
1196
1251
|
onStart(pokemon) {
|
|
1197
|
-
if (pokemon.baseSpecies.name === 'Ogerpon-Wellspring-Tera' && !
|
|
1252
|
+
if (pokemon.baseSpecies.name === 'Ogerpon-Wellspring-Tera' && !this.effectState.embodied) {
|
|
1198
1253
|
this.effectState.embodied = true;
|
|
1199
1254
|
this.boost({ spd: 1 }, pokemon);
|
|
1200
1255
|
}
|
|
@@ -1202,6 +1257,7 @@ export const Abilities = {
|
|
|
1202
1257
|
onSwitchIn() {
|
|
1203
1258
|
delete this.effectState.embodied;
|
|
1204
1259
|
},
|
|
1260
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
1205
1261
|
name: "Embody Aspect (Wellspring)",
|
|
1206
1262
|
rating: 3.5,
|
|
1207
1263
|
num: 302,
|
|
@@ -1218,6 +1274,7 @@ export const Abilities = {
|
|
|
1218
1274
|
target.switchFlag = true;
|
|
1219
1275
|
this.add('-activate', target, 'ability: Emergency Exit');
|
|
1220
1276
|
},
|
|
1277
|
+
flags: {},
|
|
1221
1278
|
name: "Emergency Exit",
|
|
1222
1279
|
rating: 1,
|
|
1223
1280
|
num: 194,
|
|
@@ -1238,6 +1295,7 @@ export const Abilities = {
|
|
|
1238
1295
|
return;
|
|
1239
1296
|
return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]);
|
|
1240
1297
|
},
|
|
1298
|
+
flags: {},
|
|
1241
1299
|
name: "Fairy Aura",
|
|
1242
1300
|
rating: 3,
|
|
1243
1301
|
num: 187,
|
|
@@ -1249,7 +1307,7 @@ export const Abilities = {
|
|
|
1249
1307
|
return this.chainModify(0.75);
|
|
1250
1308
|
}
|
|
1251
1309
|
},
|
|
1252
|
-
|
|
1310
|
+
flags: { breakable: 1 },
|
|
1253
1311
|
name: "Filter",
|
|
1254
1312
|
rating: 3,
|
|
1255
1313
|
num: 111,
|
|
@@ -1262,6 +1320,7 @@ export const Abilities = {
|
|
|
1262
1320
|
}
|
|
1263
1321
|
}
|
|
1264
1322
|
},
|
|
1323
|
+
flags: {},
|
|
1265
1324
|
name: "Flame Body",
|
|
1266
1325
|
rating: 2,
|
|
1267
1326
|
num: 49,
|
|
@@ -1273,6 +1332,7 @@ export const Abilities = {
|
|
|
1273
1332
|
return this.chainModify(1.5);
|
|
1274
1333
|
}
|
|
1275
1334
|
},
|
|
1335
|
+
flags: {},
|
|
1276
1336
|
name: "Flare Boost",
|
|
1277
1337
|
rating: 2,
|
|
1278
1338
|
num: 138,
|
|
@@ -1313,7 +1373,7 @@ export const Abilities = {
|
|
|
1313
1373
|
this.add('-end', target, 'ability: Flash Fire', '[silent]');
|
|
1314
1374
|
},
|
|
1315
1375
|
},
|
|
1316
|
-
|
|
1376
|
+
flags: { breakable: 1 },
|
|
1317
1377
|
name: "Flash Fire",
|
|
1318
1378
|
rating: 3.5,
|
|
1319
1379
|
num: 18,
|
|
@@ -1354,7 +1414,7 @@ export const Abilities = {
|
|
|
1354
1414
|
return this.chainModify(1.5);
|
|
1355
1415
|
}
|
|
1356
1416
|
},
|
|
1357
|
-
|
|
1417
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, breakable: 1 },
|
|
1358
1418
|
name: "Flower Gift",
|
|
1359
1419
|
rating: 1,
|
|
1360
1420
|
num: 122,
|
|
@@ -1394,7 +1454,7 @@ export const Abilities = {
|
|
|
1394
1454
|
return null;
|
|
1395
1455
|
}
|
|
1396
1456
|
},
|
|
1397
|
-
|
|
1457
|
+
flags: { breakable: 1 },
|
|
1398
1458
|
name: "Flower Veil",
|
|
1399
1459
|
rating: 0,
|
|
1400
1460
|
num: 166,
|
|
@@ -1408,7 +1468,7 @@ export const Abilities = {
|
|
|
1408
1468
|
mod /= 2;
|
|
1409
1469
|
return this.chainModify(mod);
|
|
1410
1470
|
},
|
|
1411
|
-
|
|
1471
|
+
flags: { breakable: 1 },
|
|
1412
1472
|
name: "Fluffy",
|
|
1413
1473
|
rating: 3.5,
|
|
1414
1474
|
num: 218,
|
|
@@ -1446,6 +1506,7 @@ export const Abilities = {
|
|
|
1446
1506
|
pokemon.formeChange(forme, this.effect, false, '[msg]');
|
|
1447
1507
|
}
|
|
1448
1508
|
},
|
|
1509
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
|
|
1449
1510
|
name: "Forecast",
|
|
1450
1511
|
rating: 2,
|
|
1451
1512
|
num: 59,
|
|
@@ -1480,19 +1541,20 @@ export const Abilities = {
|
|
|
1480
1541
|
const [warnMoveName, warnTarget] = this.sample(warnMoves);
|
|
1481
1542
|
this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget);
|
|
1482
1543
|
},
|
|
1544
|
+
flags: {},
|
|
1483
1545
|
name: "Forewarn",
|
|
1484
1546
|
rating: 0.5,
|
|
1485
1547
|
num: 108,
|
|
1486
1548
|
},
|
|
1487
1549
|
friendguard: {
|
|
1488
|
-
name: "Friend Guard",
|
|
1489
1550
|
onAnyModifyDamage(damage, source, target, move) {
|
|
1490
1551
|
if (target !== this.effectState.target && target.isAlly(this.effectState.target)) {
|
|
1491
1552
|
this.debug('Friend Guard weaken');
|
|
1492
1553
|
return this.chainModify(0.75);
|
|
1493
1554
|
}
|
|
1494
1555
|
},
|
|
1495
|
-
|
|
1556
|
+
flags: { breakable: 1 },
|
|
1557
|
+
name: "Friend Guard",
|
|
1496
1558
|
rating: 0,
|
|
1497
1559
|
num: 132,
|
|
1498
1560
|
},
|
|
@@ -1504,6 +1566,7 @@ export const Abilities = {
|
|
|
1504
1566
|
}
|
|
1505
1567
|
}
|
|
1506
1568
|
},
|
|
1569
|
+
flags: {},
|
|
1507
1570
|
name: "Frisk",
|
|
1508
1571
|
rating: 1.5,
|
|
1509
1572
|
num: 119,
|
|
@@ -1524,6 +1587,7 @@ export const Abilities = {
|
|
|
1524
1587
|
this.add("-fail", target, "unboost", "[from] ability: Full Metal Body", "[of] " + target);
|
|
1525
1588
|
}
|
|
1526
1589
|
},
|
|
1590
|
+
flags: {},
|
|
1527
1591
|
name: "Full Metal Body",
|
|
1528
1592
|
rating: 2,
|
|
1529
1593
|
num: 230,
|
|
@@ -1533,7 +1597,7 @@ export const Abilities = {
|
|
|
1533
1597
|
onModifyDef(def) {
|
|
1534
1598
|
return this.chainModify(2);
|
|
1535
1599
|
},
|
|
1536
|
-
|
|
1600
|
+
flags: { breakable: 1 },
|
|
1537
1601
|
name: "Fur Coat",
|
|
1538
1602
|
rating: 4,
|
|
1539
1603
|
num: 169,
|
|
@@ -1543,6 +1607,7 @@ export const Abilities = {
|
|
|
1543
1607
|
if (move?.type === 'Flying' && pokemon.hp === pokemon.maxhp)
|
|
1544
1608
|
return priority + 1;
|
|
1545
1609
|
},
|
|
1610
|
+
flags: {},
|
|
1546
1611
|
name: "Gale Wings",
|
|
1547
1612
|
rating: 1.5,
|
|
1548
1613
|
num: 177,
|
|
@@ -1564,20 +1629,22 @@ export const Abilities = {
|
|
|
1564
1629
|
if (move.typeChangerBoosted === this.effect)
|
|
1565
1630
|
return this.chainModify([4915, 4096]);
|
|
1566
1631
|
},
|
|
1632
|
+
flags: {},
|
|
1567
1633
|
name: "Galvanize",
|
|
1568
1634
|
rating: 4,
|
|
1569
1635
|
num: 206,
|
|
1570
1636
|
},
|
|
1571
1637
|
gluttony: {
|
|
1572
|
-
name: "Gluttony",
|
|
1573
|
-
rating: 1.5,
|
|
1574
|
-
num: 82,
|
|
1575
1638
|
onStart(pokemon) {
|
|
1576
1639
|
pokemon.abilityState.gluttony = true;
|
|
1577
1640
|
},
|
|
1578
1641
|
onDamage(item, pokemon) {
|
|
1579
1642
|
pokemon.abilityState.gluttony = true;
|
|
1580
1643
|
},
|
|
1644
|
+
flags: {},
|
|
1645
|
+
name: "Gluttony",
|
|
1646
|
+
rating: 1.5,
|
|
1647
|
+
num: 82,
|
|
1581
1648
|
},
|
|
1582
1649
|
goodasgold: {
|
|
1583
1650
|
onTryHit(target, source, move) {
|
|
@@ -1586,7 +1653,7 @@ export const Abilities = {
|
|
|
1586
1653
|
return null;
|
|
1587
1654
|
}
|
|
1588
1655
|
},
|
|
1589
|
-
|
|
1656
|
+
flags: { breakable: 1 },
|
|
1590
1657
|
name: "Good as Gold",
|
|
1591
1658
|
rating: 5,
|
|
1592
1659
|
num: 283,
|
|
@@ -1598,6 +1665,7 @@ export const Abilities = {
|
|
|
1598
1665
|
this.boost({ spe: -1 }, source, target, null, true);
|
|
1599
1666
|
}
|
|
1600
1667
|
},
|
|
1668
|
+
flags: {},
|
|
1601
1669
|
name: "Gooey",
|
|
1602
1670
|
rating: 2,
|
|
1603
1671
|
num: 183,
|
|
@@ -1645,6 +1713,7 @@ export const Abilities = {
|
|
|
1645
1713
|
onEnd(pokemon) {
|
|
1646
1714
|
pokemon.abilityState.choiceLock = "";
|
|
1647
1715
|
},
|
|
1716
|
+
flags: {},
|
|
1648
1717
|
name: "Gorilla Tactics",
|
|
1649
1718
|
rating: 4.5,
|
|
1650
1719
|
num: 255,
|
|
@@ -1655,7 +1724,7 @@ export const Abilities = {
|
|
|
1655
1724
|
if (this.field.isTerrain('grassyterrain'))
|
|
1656
1725
|
return this.chainModify(1.5);
|
|
1657
1726
|
},
|
|
1658
|
-
|
|
1727
|
+
flags: { breakable: 1 },
|
|
1659
1728
|
name: "Grass Pelt",
|
|
1660
1729
|
rating: 0.5,
|
|
1661
1730
|
num: 179,
|
|
@@ -1664,6 +1733,7 @@ export const Abilities = {
|
|
|
1664
1733
|
onStart(source) {
|
|
1665
1734
|
this.field.setTerrain('grassyterrain');
|
|
1666
1735
|
},
|
|
1736
|
+
flags: {},
|
|
1667
1737
|
name: "Grassy Surge",
|
|
1668
1738
|
rating: 4,
|
|
1669
1739
|
num: 229,
|
|
@@ -1674,6 +1744,7 @@ export const Abilities = {
|
|
|
1674
1744
|
this.boost({ spa: length }, source);
|
|
1675
1745
|
}
|
|
1676
1746
|
},
|
|
1747
|
+
flags: {},
|
|
1677
1748
|
name: "Grim Neigh",
|
|
1678
1749
|
rating: 3,
|
|
1679
1750
|
num: 265,
|
|
@@ -1690,14 +1761,14 @@ export const Abilities = {
|
|
|
1690
1761
|
this.boost({ atk: 1 }, target, target, null, false, true);
|
|
1691
1762
|
}
|
|
1692
1763
|
},
|
|
1693
|
-
|
|
1764
|
+
flags: { breakable: 1 },
|
|
1694
1765
|
name: "Guard Dog",
|
|
1695
1766
|
rating: 2,
|
|
1696
1767
|
num: 275,
|
|
1697
1768
|
},
|
|
1698
1769
|
gulpmissile: {
|
|
1699
1770
|
onDamagingHit(damage, target, source, move) {
|
|
1700
|
-
if (!source.hp || !source.isActive || target.
|
|
1771
|
+
if (!source.hp || !source.isActive || target.isSemiInvulnerable())
|
|
1701
1772
|
return;
|
|
1702
1773
|
if (['cramorantgulping', 'cramorantgorging'].includes(target.species.id)) {
|
|
1703
1774
|
this.damage(source.baseMaxhp / 4, source, target);
|
|
@@ -1712,13 +1783,12 @@ export const Abilities = {
|
|
|
1712
1783
|
},
|
|
1713
1784
|
// The Dive part of this mechanic is implemented in Dive's `onTryMove` in moves.ts
|
|
1714
1785
|
onSourceTryPrimaryHit(target, source, effect) {
|
|
1715
|
-
if (effect
|
|
1716
|
-
source.species.name === 'Cramorant' && !source.transformed) {
|
|
1786
|
+
if (effect?.id === 'surf' && source.hasAbility('gulpmissile') && source.species.name === 'Cramorant') {
|
|
1717
1787
|
const forme = source.hp <= source.maxhp / 2 ? 'cramorantgorging' : 'cramorantgulping';
|
|
1718
1788
|
source.formeChange(forme, effect);
|
|
1719
1789
|
}
|
|
1720
1790
|
},
|
|
1721
|
-
|
|
1791
|
+
flags: { cantsuppress: 1, notransform: 1 },
|
|
1722
1792
|
name: "Gulp Missile",
|
|
1723
1793
|
rating: 2.5,
|
|
1724
1794
|
num: 241,
|
|
@@ -1730,6 +1800,7 @@ export const Abilities = {
|
|
|
1730
1800
|
return this.chainModify(1.5);
|
|
1731
1801
|
}
|
|
1732
1802
|
},
|
|
1803
|
+
flags: {},
|
|
1733
1804
|
name: "Guts",
|
|
1734
1805
|
rating: 3.5,
|
|
1735
1806
|
num: 62,
|
|
@@ -1747,12 +1818,12 @@ export const Abilities = {
|
|
|
1747
1818
|
return this.chainModify([5461, 4096]);
|
|
1748
1819
|
}
|
|
1749
1820
|
},
|
|
1821
|
+
flags: {},
|
|
1750
1822
|
name: "Hadron Engine",
|
|
1751
1823
|
rating: 4.5,
|
|
1752
1824
|
num: 289,
|
|
1753
1825
|
},
|
|
1754
1826
|
harvest: {
|
|
1755
|
-
name: "Harvest",
|
|
1756
1827
|
onResidualOrder: 28,
|
|
1757
1828
|
onResidualSubOrder: 2,
|
|
1758
1829
|
onResidual(pokemon) {
|
|
@@ -1764,11 +1835,12 @@ export const Abilities = {
|
|
|
1764
1835
|
}
|
|
1765
1836
|
}
|
|
1766
1837
|
},
|
|
1838
|
+
flags: {},
|
|
1839
|
+
name: "Harvest",
|
|
1767
1840
|
rating: 2.5,
|
|
1768
1841
|
num: 139,
|
|
1769
1842
|
},
|
|
1770
1843
|
healer: {
|
|
1771
|
-
name: "Healer",
|
|
1772
1844
|
onResidualOrder: 5,
|
|
1773
1845
|
onResidualSubOrder: 3,
|
|
1774
1846
|
onResidual(pokemon) {
|
|
@@ -1779,6 +1851,8 @@ export const Abilities = {
|
|
|
1779
1851
|
}
|
|
1780
1852
|
}
|
|
1781
1853
|
},
|
|
1854
|
+
flags: {},
|
|
1855
|
+
name: "Healer",
|
|
1782
1856
|
rating: 0,
|
|
1783
1857
|
num: 131,
|
|
1784
1858
|
},
|
|
@@ -1802,7 +1876,7 @@ export const Abilities = {
|
|
|
1802
1876
|
return damage / 2;
|
|
1803
1877
|
}
|
|
1804
1878
|
},
|
|
1805
|
-
|
|
1879
|
+
flags: { breakable: 1 },
|
|
1806
1880
|
name: "Heatproof",
|
|
1807
1881
|
rating: 2,
|
|
1808
1882
|
num: 85,
|
|
@@ -1812,12 +1886,13 @@ export const Abilities = {
|
|
|
1812
1886
|
onModifyWeight(weighthg) {
|
|
1813
1887
|
return weighthg * 2;
|
|
1814
1888
|
},
|
|
1815
|
-
|
|
1889
|
+
flags: { breakable: 1 },
|
|
1816
1890
|
name: "Heavy Metal",
|
|
1817
1891
|
rating: 0,
|
|
1818
1892
|
num: 134,
|
|
1819
1893
|
},
|
|
1820
1894
|
honeygather: {
|
|
1895
|
+
flags: {},
|
|
1821
1896
|
name: "Honey Gather",
|
|
1822
1897
|
rating: 0,
|
|
1823
1898
|
num: 118,
|
|
@@ -1828,6 +1903,7 @@ export const Abilities = {
|
|
|
1828
1903
|
this.heal(ally.baseMaxhp / 4, ally, pokemon);
|
|
1829
1904
|
}
|
|
1830
1905
|
},
|
|
1906
|
+
flags: {},
|
|
1831
1907
|
name: "Hospitality",
|
|
1832
1908
|
rating: 0,
|
|
1833
1909
|
num: 299,
|
|
@@ -1837,6 +1913,7 @@ export const Abilities = {
|
|
|
1837
1913
|
onModifyAtk(atk) {
|
|
1838
1914
|
return this.chainModify(2);
|
|
1839
1915
|
},
|
|
1916
|
+
flags: {},
|
|
1840
1917
|
name: "Huge Power",
|
|
1841
1918
|
rating: 5,
|
|
1842
1919
|
num: 37,
|
|
@@ -1844,11 +1921,12 @@ export const Abilities = {
|
|
|
1844
1921
|
hungerswitch: {
|
|
1845
1922
|
onResidualOrder: 29,
|
|
1846
1923
|
onResidual(pokemon) {
|
|
1847
|
-
if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.
|
|
1924
|
+
if (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.terastallized)
|
|
1848
1925
|
return;
|
|
1849
1926
|
const targetForme = pokemon.species.name === 'Morpeko' ? 'Morpeko-Hangry' : 'Morpeko';
|
|
1850
1927
|
pokemon.formeChange(targetForme);
|
|
1851
1928
|
},
|
|
1929
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
1852
1930
|
name: "Hunger Switch",
|
|
1853
1931
|
rating: 1,
|
|
1854
1932
|
num: 258,
|
|
@@ -1865,6 +1943,7 @@ export const Abilities = {
|
|
|
1865
1943
|
return this.chainModify([3277, 4096]);
|
|
1866
1944
|
}
|
|
1867
1945
|
},
|
|
1946
|
+
flags: {},
|
|
1868
1947
|
name: "Hustle",
|
|
1869
1948
|
rating: 3.5,
|
|
1870
1949
|
num: 55,
|
|
@@ -1879,6 +1958,7 @@ export const Abilities = {
|
|
|
1879
1958
|
pokemon.cureStatus();
|
|
1880
1959
|
}
|
|
1881
1960
|
},
|
|
1961
|
+
flags: {},
|
|
1882
1962
|
name: "Hydration",
|
|
1883
1963
|
rating: 1.5,
|
|
1884
1964
|
num: 93,
|
|
@@ -1894,7 +1974,7 @@ export const Abilities = {
|
|
|
1894
1974
|
}
|
|
1895
1975
|
}
|
|
1896
1976
|
},
|
|
1897
|
-
|
|
1977
|
+
flags: { breakable: 1 },
|
|
1898
1978
|
name: "Hyper Cutter",
|
|
1899
1979
|
rating: 1.5,
|
|
1900
1980
|
num: 52,
|
|
@@ -1909,14 +1989,14 @@ export const Abilities = {
|
|
|
1909
1989
|
if (type === 'hail')
|
|
1910
1990
|
return false;
|
|
1911
1991
|
},
|
|
1992
|
+
flags: {},
|
|
1912
1993
|
name: "Ice Body",
|
|
1913
1994
|
rating: 1,
|
|
1914
1995
|
num: 115,
|
|
1915
1996
|
},
|
|
1916
1997
|
iceface: {
|
|
1917
1998
|
onStart(pokemon) {
|
|
1918
|
-
if (this.field.isWeather(['hail', 'snow']) &&
|
|
1919
|
-
pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {
|
|
1999
|
+
if (this.field.isWeather(['hail', 'snow']) && pokemon.species.id === 'eiscuenoice') {
|
|
1920
2000
|
this.add('-activate', pokemon, 'ability: Ice Face');
|
|
1921
2001
|
this.effectState.busted = false;
|
|
1922
2002
|
pokemon.formeChange('Eiscue', this.effect, true);
|
|
@@ -1924,8 +2004,7 @@ export const Abilities = {
|
|
|
1924
2004
|
},
|
|
1925
2005
|
onDamagePriority: 1,
|
|
1926
2006
|
onDamage(damage, target, source, effect) {
|
|
1927
|
-
if (effect
|
|
1928
|
-
target.species.id === 'eiscue' && !target.transformed) {
|
|
2007
|
+
if (effect?.effectType === 'Move' && effect.category === 'Physical' && target.species.id === 'eiscue') {
|
|
1929
2008
|
this.add('-activate', target, 'ability: Ice Face');
|
|
1930
2009
|
this.effectState.busted = true;
|
|
1931
2010
|
return 0;
|
|
@@ -1934,7 +2013,7 @@ export const Abilities = {
|
|
|
1934
2013
|
onCriticalHit(target, type, move) {
|
|
1935
2014
|
if (!target)
|
|
1936
2015
|
return;
|
|
1937
|
-
if (move.category !== 'Physical' || target.species.id !== 'eiscue'
|
|
2016
|
+
if (move.category !== 'Physical' || target.species.id !== 'eiscue')
|
|
1938
2017
|
return;
|
|
1939
2018
|
if (target.volatiles['substitute'] && !(move.flags['bypasssub'] || move.infiltrates))
|
|
1940
2019
|
return;
|
|
@@ -1945,7 +2024,7 @@ export const Abilities = {
|
|
|
1945
2024
|
onEffectiveness(typeMod, target, type, move) {
|
|
1946
2025
|
if (!target)
|
|
1947
2026
|
return;
|
|
1948
|
-
if (move.category !== 'Physical' || target.species.id !== 'eiscue'
|
|
2027
|
+
if (move.category !== 'Physical' || target.species.id !== 'eiscue')
|
|
1949
2028
|
return;
|
|
1950
2029
|
const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);
|
|
1951
2030
|
if (hitSub)
|
|
@@ -1965,15 +2044,16 @@ export const Abilities = {
|
|
|
1965
2044
|
return;
|
|
1966
2045
|
if (!pokemon.hp)
|
|
1967
2046
|
return;
|
|
1968
|
-
if (this.field.isWeather(['hail', 'snow']) &&
|
|
1969
|
-
pokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {
|
|
2047
|
+
if (this.field.isWeather(['hail', 'snow']) && pokemon.species.id === 'eiscuenoice') {
|
|
1970
2048
|
this.add('-activate', pokemon, 'ability: Ice Face');
|
|
1971
2049
|
this.effectState.busted = false;
|
|
1972
2050
|
pokemon.formeChange('Eiscue', this.effect, true);
|
|
1973
2051
|
}
|
|
1974
2052
|
},
|
|
1975
|
-
|
|
1976
|
-
|
|
2053
|
+
flags: {
|
|
2054
|
+
failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1,
|
|
2055
|
+
breakable: 1, notransform: 1,
|
|
2056
|
+
},
|
|
1977
2057
|
name: "Ice Face",
|
|
1978
2058
|
rating: 3,
|
|
1979
2059
|
num: 248,
|
|
@@ -1984,7 +2064,7 @@ export const Abilities = {
|
|
|
1984
2064
|
return this.chainModify(0.5);
|
|
1985
2065
|
}
|
|
1986
2066
|
},
|
|
1987
|
-
|
|
2067
|
+
flags: { breakable: 1 },
|
|
1988
2068
|
name: "Ice Scales",
|
|
1989
2069
|
rating: 4,
|
|
1990
2070
|
num: 246,
|
|
@@ -2003,7 +2083,7 @@ export const Abilities = {
|
|
|
2003
2083
|
onModifyMove(move) {
|
|
2004
2084
|
move.ignoreEvasion = true;
|
|
2005
2085
|
},
|
|
2006
|
-
|
|
2086
|
+
flags: { breakable: 1 },
|
|
2007
2087
|
name: "Illuminate",
|
|
2008
2088
|
rating: 0.5,
|
|
2009
2089
|
num: 35,
|
|
@@ -2045,6 +2125,7 @@ export const Abilities = {
|
|
|
2045
2125
|
onFaint(pokemon) {
|
|
2046
2126
|
pokemon.illusion = null;
|
|
2047
2127
|
},
|
|
2128
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 },
|
|
2048
2129
|
name: "Illusion",
|
|
2049
2130
|
rating: 4.5,
|
|
2050
2131
|
num: 149,
|
|
@@ -2064,7 +2145,7 @@ export const Abilities = {
|
|
|
2064
2145
|
}
|
|
2065
2146
|
return false;
|
|
2066
2147
|
},
|
|
2067
|
-
|
|
2148
|
+
flags: { breakable: 1 },
|
|
2068
2149
|
name: "Immunity",
|
|
2069
2150
|
rating: 2,
|
|
2070
2151
|
num: 17,
|
|
@@ -2086,6 +2167,7 @@ export const Abilities = {
|
|
|
2086
2167
|
}
|
|
2087
2168
|
this.effectState.switchingIn = false;
|
|
2088
2169
|
},
|
|
2170
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
|
|
2089
2171
|
name: "Imposter",
|
|
2090
2172
|
rating: 5,
|
|
2091
2173
|
num: 150,
|
|
@@ -2094,18 +2176,20 @@ export const Abilities = {
|
|
|
2094
2176
|
onModifyMove(move) {
|
|
2095
2177
|
move.infiltrates = true;
|
|
2096
2178
|
},
|
|
2179
|
+
flags: {},
|
|
2097
2180
|
name: "Infiltrator",
|
|
2098
2181
|
rating: 2.5,
|
|
2099
2182
|
num: 151,
|
|
2100
2183
|
},
|
|
2101
2184
|
innardsout: {
|
|
2102
|
-
name: "Innards Out",
|
|
2103
2185
|
onDamagingHitOrder: 1,
|
|
2104
2186
|
onDamagingHit(damage, target, source, move) {
|
|
2105
2187
|
if (!target.hp) {
|
|
2106
2188
|
this.damage(target.getUndynamaxedHP(damage), source, target);
|
|
2107
2189
|
}
|
|
2108
2190
|
},
|
|
2191
|
+
flags: {},
|
|
2192
|
+
name: "Innards Out",
|
|
2109
2193
|
rating: 4,
|
|
2110
2194
|
num: 215,
|
|
2111
2195
|
},
|
|
@@ -2120,7 +2204,7 @@ export const Abilities = {
|
|
|
2120
2204
|
this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', '[of] ' + target);
|
|
2121
2205
|
}
|
|
2122
2206
|
},
|
|
2123
|
-
|
|
2207
|
+
flags: { breakable: 1 },
|
|
2124
2208
|
name: "Inner Focus",
|
|
2125
2209
|
rating: 1,
|
|
2126
2210
|
num: 39,
|
|
@@ -2146,7 +2230,7 @@ export const Abilities = {
|
|
|
2146
2230
|
return null;
|
|
2147
2231
|
}
|
|
2148
2232
|
},
|
|
2149
|
-
|
|
2233
|
+
flags: { breakable: 1 },
|
|
2150
2234
|
name: "Insomnia",
|
|
2151
2235
|
rating: 1.5,
|
|
2152
2236
|
num: 15,
|
|
@@ -2167,6 +2251,7 @@ export const Abilities = {
|
|
|
2167
2251
|
}
|
|
2168
2252
|
}
|
|
2169
2253
|
},
|
|
2254
|
+
flags: {},
|
|
2170
2255
|
name: "Intimidate",
|
|
2171
2256
|
rating: 3.5,
|
|
2172
2257
|
num: 22,
|
|
@@ -2178,6 +2263,7 @@ export const Abilities = {
|
|
|
2178
2263
|
pokemon.swordBoost = true;
|
|
2179
2264
|
this.boost({ atk: 1 }, pokemon);
|
|
2180
2265
|
},
|
|
2266
|
+
flags: {},
|
|
2181
2267
|
name: "Intrepid Sword",
|
|
2182
2268
|
rating: 4,
|
|
2183
2269
|
num: 234,
|
|
@@ -2189,6 +2275,7 @@ export const Abilities = {
|
|
|
2189
2275
|
this.damage(source.baseMaxhp / 8, source, target);
|
|
2190
2276
|
}
|
|
2191
2277
|
},
|
|
2278
|
+
flags: {},
|
|
2192
2279
|
name: "Iron Barbs",
|
|
2193
2280
|
rating: 2.5,
|
|
2194
2281
|
num: 160,
|
|
@@ -2201,6 +2288,7 @@ export const Abilities = {
|
|
|
2201
2288
|
return this.chainModify([4915, 4096]);
|
|
2202
2289
|
}
|
|
2203
2290
|
},
|
|
2291
|
+
flags: {},
|
|
2204
2292
|
name: "Iron Fist",
|
|
2205
2293
|
rating: 3,
|
|
2206
2294
|
num: 89,
|
|
@@ -2211,6 +2299,7 @@ export const Abilities = {
|
|
|
2211
2299
|
this.boost({ atk: 1 });
|
|
2212
2300
|
}
|
|
2213
2301
|
},
|
|
2302
|
+
flags: {},
|
|
2214
2303
|
name: "Justified",
|
|
2215
2304
|
rating: 2.5,
|
|
2216
2305
|
num: 154,
|
|
@@ -2229,7 +2318,7 @@ export const Abilities = {
|
|
|
2229
2318
|
onModifyMove(move) {
|
|
2230
2319
|
move.ignoreEvasion = true;
|
|
2231
2320
|
},
|
|
2232
|
-
|
|
2321
|
+
flags: { breakable: 1 },
|
|
2233
2322
|
name: "Keen Eye",
|
|
2234
2323
|
rating: 0.5,
|
|
2235
2324
|
num: 51,
|
|
@@ -2239,6 +2328,7 @@ export const Abilities = {
|
|
|
2239
2328
|
onStart(pokemon) {
|
|
2240
2329
|
this.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);
|
|
2241
2330
|
},
|
|
2331
|
+
flags: {},
|
|
2242
2332
|
name: "Klutz",
|
|
2243
2333
|
rating: -1,
|
|
2244
2334
|
num: 103,
|
|
@@ -2258,14 +2348,14 @@ export const Abilities = {
|
|
|
2258
2348
|
return null;
|
|
2259
2349
|
}
|
|
2260
2350
|
},
|
|
2261
|
-
|
|
2351
|
+
flags: { breakable: 1 },
|
|
2262
2352
|
name: "Leaf Guard",
|
|
2263
2353
|
rating: 0.5,
|
|
2264
2354
|
num: 102,
|
|
2265
2355
|
},
|
|
2266
2356
|
levitate: {
|
|
2267
2357
|
// airborneness implemented in sim/pokemon.js:Pokemon#isGrounded
|
|
2268
|
-
|
|
2358
|
+
flags: { breakable: 1 },
|
|
2269
2359
|
name: "Levitate",
|
|
2270
2360
|
rating: 3.5,
|
|
2271
2361
|
num: 26,
|
|
@@ -2287,6 +2377,7 @@ export const Abilities = {
|
|
|
2287
2377
|
onSwitchIn() {
|
|
2288
2378
|
delete this.effectState.libero;
|
|
2289
2379
|
},
|
|
2380
|
+
flags: {},
|
|
2290
2381
|
name: "Libero",
|
|
2291
2382
|
rating: 4,
|
|
2292
2383
|
num: 236,
|
|
@@ -2295,7 +2386,7 @@ export const Abilities = {
|
|
|
2295
2386
|
onModifyWeight(weighthg) {
|
|
2296
2387
|
return this.trunc(weighthg / 2);
|
|
2297
2388
|
},
|
|
2298
|
-
|
|
2389
|
+
flags: { breakable: 1 },
|
|
2299
2390
|
name: "Light Metal",
|
|
2300
2391
|
rating: 1,
|
|
2301
2392
|
num: 135,
|
|
@@ -2322,7 +2413,7 @@ export const Abilities = {
|
|
|
2322
2413
|
return this.effectState.target;
|
|
2323
2414
|
}
|
|
2324
2415
|
},
|
|
2325
|
-
|
|
2416
|
+
flags: { breakable: 1 },
|
|
2326
2417
|
name: "Lightning Rod",
|
|
2327
2418
|
rating: 3,
|
|
2328
2419
|
num: 31,
|
|
@@ -2342,7 +2433,7 @@ export const Abilities = {
|
|
|
2342
2433
|
}
|
|
2343
2434
|
return false;
|
|
2344
2435
|
},
|
|
2345
|
-
|
|
2436
|
+
flags: { breakable: 1 },
|
|
2346
2437
|
name: "Limber",
|
|
2347
2438
|
rating: 2,
|
|
2348
2439
|
num: 7,
|
|
@@ -2350,7 +2441,7 @@ export const Abilities = {
|
|
|
2350
2441
|
lingeringaroma: {
|
|
2351
2442
|
onDamagingHit(damage, target, source, move) {
|
|
2352
2443
|
const sourceAbility = source.getAbility();
|
|
2353
|
-
if (sourceAbility.
|
|
2444
|
+
if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'lingeringaroma') {
|
|
2354
2445
|
return;
|
|
2355
2446
|
}
|
|
2356
2447
|
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
|
|
@@ -2360,6 +2451,7 @@ export const Abilities = {
|
|
|
2360
2451
|
}
|
|
2361
2452
|
}
|
|
2362
2453
|
},
|
|
2454
|
+
flags: {},
|
|
2363
2455
|
name: "Lingering Aroma",
|
|
2364
2456
|
rating: 2,
|
|
2365
2457
|
num: 268,
|
|
@@ -2373,6 +2465,7 @@ export const Abilities = {
|
|
|
2373
2465
|
return 0;
|
|
2374
2466
|
}
|
|
2375
2467
|
},
|
|
2468
|
+
flags: {},
|
|
2376
2469
|
name: "Liquid Ooze",
|
|
2377
2470
|
rating: 2.5,
|
|
2378
2471
|
num: 64,
|
|
@@ -2384,6 +2477,7 @@ export const Abilities = {
|
|
|
2384
2477
|
move.type = 'Water';
|
|
2385
2478
|
}
|
|
2386
2479
|
},
|
|
2480
|
+
flags: {},
|
|
2387
2481
|
name: "Liquid Voice",
|
|
2388
2482
|
rating: 1.5,
|
|
2389
2483
|
num: 204,
|
|
@@ -2392,12 +2486,12 @@ export const Abilities = {
|
|
|
2392
2486
|
onModifyMove(move) {
|
|
2393
2487
|
delete move.flags['contact'];
|
|
2394
2488
|
},
|
|
2489
|
+
flags: {},
|
|
2395
2490
|
name: "Long Reach",
|
|
2396
2491
|
rating: 1,
|
|
2397
2492
|
num: 203,
|
|
2398
2493
|
},
|
|
2399
2494
|
magicbounce: {
|
|
2400
|
-
name: "Magic Bounce",
|
|
2401
2495
|
onTryHitPriority: 1,
|
|
2402
2496
|
onTryHit(target, source, move) {
|
|
2403
2497
|
if (target === source || move.hasBounced || !move.flags['reflectable']) {
|
|
@@ -2422,7 +2516,8 @@ export const Abilities = {
|
|
|
2422
2516
|
condition: {
|
|
2423
2517
|
duration: 1,
|
|
2424
2518
|
},
|
|
2425
|
-
|
|
2519
|
+
flags: { breakable: 1 },
|
|
2520
|
+
name: "Magic Bounce",
|
|
2426
2521
|
rating: 4,
|
|
2427
2522
|
num: 156,
|
|
2428
2523
|
},
|
|
@@ -2434,6 +2529,7 @@ export const Abilities = {
|
|
|
2434
2529
|
return false;
|
|
2435
2530
|
}
|
|
2436
2531
|
},
|
|
2532
|
+
flags: {},
|
|
2437
2533
|
name: "Magic Guard",
|
|
2438
2534
|
rating: 4,
|
|
2439
2535
|
num: 98,
|
|
@@ -2455,6 +2551,7 @@ export const Abilities = {
|
|
|
2455
2551
|
this.add('-item', source, yourItem, '[from] ability: Magician', '[of] ' + target);
|
|
2456
2552
|
}
|
|
2457
2553
|
},
|
|
2554
|
+
flags: {},
|
|
2458
2555
|
name: "Magician",
|
|
2459
2556
|
rating: 1,
|
|
2460
2557
|
num: 170,
|
|
@@ -2470,7 +2567,7 @@ export const Abilities = {
|
|
|
2470
2567
|
if (type === 'frz')
|
|
2471
2568
|
return false;
|
|
2472
2569
|
},
|
|
2473
|
-
|
|
2570
|
+
flags: { breakable: 1 },
|
|
2474
2571
|
name: "Magma Armor",
|
|
2475
2572
|
rating: 0.5,
|
|
2476
2573
|
num: 40,
|
|
@@ -2490,6 +2587,7 @@ export const Abilities = {
|
|
|
2490
2587
|
pokemon.maybeTrapped = true;
|
|
2491
2588
|
}
|
|
2492
2589
|
},
|
|
2590
|
+
flags: {},
|
|
2493
2591
|
name: "Magnet Pull",
|
|
2494
2592
|
rating: 4,
|
|
2495
2593
|
num: 42,
|
|
@@ -2501,7 +2599,7 @@ export const Abilities = {
|
|
|
2501
2599
|
return this.chainModify(1.5);
|
|
2502
2600
|
}
|
|
2503
2601
|
},
|
|
2504
|
-
|
|
2602
|
+
flags: { breakable: 1 },
|
|
2505
2603
|
name: "Marvel Scale",
|
|
2506
2604
|
rating: 2.5,
|
|
2507
2605
|
num: 63,
|
|
@@ -2513,6 +2611,7 @@ export const Abilities = {
|
|
|
2513
2611
|
return this.chainModify(1.5);
|
|
2514
2612
|
}
|
|
2515
2613
|
},
|
|
2614
|
+
flags: {},
|
|
2516
2615
|
name: "Mega Launcher",
|
|
2517
2616
|
rating: 3,
|
|
2518
2617
|
num: 178,
|
|
@@ -2522,6 +2621,7 @@ export const Abilities = {
|
|
|
2522
2621
|
if (target && ['psn', 'tox'].includes(target.status))
|
|
2523
2622
|
return 5;
|
|
2524
2623
|
},
|
|
2624
|
+
flags: {},
|
|
2525
2625
|
name: "Merciless",
|
|
2526
2626
|
rating: 1.5,
|
|
2527
2627
|
num: 196,
|
|
@@ -2561,6 +2661,7 @@ export const Abilities = {
|
|
|
2561
2661
|
this.add('-end', pokemon, 'typechange', '[silent]');
|
|
2562
2662
|
}
|
|
2563
2663
|
},
|
|
2664
|
+
flags: {},
|
|
2564
2665
|
name: "Mimicry",
|
|
2565
2666
|
rating: 0,
|
|
2566
2667
|
num: 250,
|
|
@@ -2586,6 +2687,7 @@ export const Abilities = {
|
|
|
2586
2687
|
move.ignoreImmunity['Normal'] = true;
|
|
2587
2688
|
}
|
|
2588
2689
|
},
|
|
2690
|
+
flags: { breakable: 1 },
|
|
2589
2691
|
name: "Mind's Eye",
|
|
2590
2692
|
rating: 0,
|
|
2591
2693
|
num: 300,
|
|
@@ -2599,6 +2701,7 @@ export const Abilities = {
|
|
|
2599
2701
|
}
|
|
2600
2702
|
}
|
|
2601
2703
|
},
|
|
2704
|
+
flags: {},
|
|
2602
2705
|
name: "Minus",
|
|
2603
2706
|
rating: 0,
|
|
2604
2707
|
num: 58,
|
|
@@ -2623,7 +2726,7 @@ export const Abilities = {
|
|
|
2623
2726
|
}
|
|
2624
2727
|
}
|
|
2625
2728
|
},
|
|
2626
|
-
|
|
2729
|
+
flags: { breakable: 1 },
|
|
2627
2730
|
name: "Mirror Armor",
|
|
2628
2731
|
rating: 2,
|
|
2629
2732
|
num: 240,
|
|
@@ -2632,6 +2735,7 @@ export const Abilities = {
|
|
|
2632
2735
|
onStart(source) {
|
|
2633
2736
|
this.field.setTerrain('mistyterrain');
|
|
2634
2737
|
},
|
|
2738
|
+
flags: {},
|
|
2635
2739
|
name: "Misty Surge",
|
|
2636
2740
|
rating: 3.5,
|
|
2637
2741
|
num: 228,
|
|
@@ -2643,6 +2747,7 @@ export const Abilities = {
|
|
|
2643
2747
|
onModifyMove(move) {
|
|
2644
2748
|
move.ignoreAbility = true;
|
|
2645
2749
|
},
|
|
2750
|
+
flags: {},
|
|
2646
2751
|
name: "Mold Breaker",
|
|
2647
2752
|
rating: 3,
|
|
2648
2753
|
num: 104,
|
|
@@ -2678,6 +2783,7 @@ export const Abilities = {
|
|
|
2678
2783
|
boost[randomStat] = -1;
|
|
2679
2784
|
this.boost(boost, pokemon, pokemon);
|
|
2680
2785
|
},
|
|
2786
|
+
flags: {},
|
|
2681
2787
|
name: "Moody",
|
|
2682
2788
|
rating: 5,
|
|
2683
2789
|
num: 141,
|
|
@@ -2691,7 +2797,7 @@ export const Abilities = {
|
|
|
2691
2797
|
return null;
|
|
2692
2798
|
}
|
|
2693
2799
|
},
|
|
2694
|
-
|
|
2800
|
+
flags: { breakable: 1 },
|
|
2695
2801
|
name: "Motor Drive",
|
|
2696
2802
|
rating: 3,
|
|
2697
2803
|
num: 78,
|
|
@@ -2702,6 +2808,7 @@ export const Abilities = {
|
|
|
2702
2808
|
this.boost({ atk: length }, source);
|
|
2703
2809
|
}
|
|
2704
2810
|
},
|
|
2811
|
+
flags: {},
|
|
2705
2812
|
name: "Moxie",
|
|
2706
2813
|
rating: 3,
|
|
2707
2814
|
num: 153,
|
|
@@ -2713,23 +2820,22 @@ export const Abilities = {
|
|
|
2713
2820
|
return this.chainModify(0.5);
|
|
2714
2821
|
}
|
|
2715
2822
|
},
|
|
2716
|
-
|
|
2823
|
+
flags: { breakable: 1 },
|
|
2717
2824
|
name: "Multiscale",
|
|
2718
2825
|
rating: 3.5,
|
|
2719
2826
|
num: 136,
|
|
2720
2827
|
},
|
|
2721
2828
|
multitype: {
|
|
2722
2829
|
// Multitype's type-changing itself is implemented in statuses.js
|
|
2723
|
-
|
|
2830
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
2724
2831
|
name: "Multitype",
|
|
2725
2832
|
rating: 4,
|
|
2726
2833
|
num: 121,
|
|
2727
2834
|
},
|
|
2728
2835
|
mummy: {
|
|
2729
|
-
name: "Mummy",
|
|
2730
2836
|
onDamagingHit(damage, target, source, move) {
|
|
2731
2837
|
const sourceAbility = source.getAbility();
|
|
2732
|
-
if (sourceAbility.
|
|
2838
|
+
if (sourceAbility.flags['cantsuppress'] || sourceAbility.id === 'mummy') {
|
|
2733
2839
|
return;
|
|
2734
2840
|
}
|
|
2735
2841
|
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
|
|
@@ -2739,6 +2845,8 @@ export const Abilities = {
|
|
|
2739
2845
|
}
|
|
2740
2846
|
}
|
|
2741
2847
|
},
|
|
2848
|
+
flags: {},
|
|
2849
|
+
name: "Mummy",
|
|
2742
2850
|
rating: 2,
|
|
2743
2851
|
num: 152,
|
|
2744
2852
|
},
|
|
@@ -2754,6 +2862,7 @@ export const Abilities = {
|
|
|
2754
2862
|
move.ignoreAbility = true;
|
|
2755
2863
|
}
|
|
2756
2864
|
},
|
|
2865
|
+
flags: {},
|
|
2757
2866
|
name: "Mycelium Might",
|
|
2758
2867
|
rating: 2,
|
|
2759
2868
|
num: 298,
|
|
@@ -2836,6 +2945,7 @@ export const Abilities = {
|
|
|
2836
2945
|
if (!pokemon.showCure)
|
|
2837
2946
|
pokemon.showCure = undefined;
|
|
2838
2947
|
},
|
|
2948
|
+
flags: {},
|
|
2839
2949
|
name: "Natural Cure",
|
|
2840
2950
|
rating: 2.5,
|
|
2841
2951
|
num: 30,
|
|
@@ -2846,6 +2956,7 @@ export const Abilities = {
|
|
|
2846
2956
|
return this.chainModify([5120, 4096]);
|
|
2847
2957
|
}
|
|
2848
2958
|
},
|
|
2959
|
+
flags: {},
|
|
2849
2960
|
name: "Neuroforce",
|
|
2850
2961
|
rating: 2.5,
|
|
2851
2962
|
num: 233,
|
|
@@ -2853,8 +2964,6 @@ export const Abilities = {
|
|
|
2853
2964
|
neutralizinggas: {
|
|
2854
2965
|
// Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility
|
|
2855
2966
|
onPreStart(pokemon) {
|
|
2856
|
-
if (pokemon.transformed)
|
|
2857
|
-
return;
|
|
2858
2967
|
this.add('-ability', pokemon, 'Neutralizing Gas');
|
|
2859
2968
|
pokemon.abilityState.ending = false;
|
|
2860
2969
|
const strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];
|
|
@@ -2900,7 +3009,7 @@ export const Abilities = {
|
|
|
2900
3009
|
this.speedSort(sortedActive);
|
|
2901
3010
|
for (const pokemon of sortedActive) {
|
|
2902
3011
|
if (pokemon !== source) {
|
|
2903
|
-
if (pokemon.getAbility().
|
|
3012
|
+
if (pokemon.getAbility().flags['cantsuppress'])
|
|
2904
3013
|
continue; // does not interact with e.g Ice Face, Zen Mode
|
|
2905
3014
|
if (pokemon.hasItem('abilityshield'))
|
|
2906
3015
|
continue; // don't restart abilities that weren't suppressed
|
|
@@ -2912,6 +3021,7 @@ export const Abilities = {
|
|
|
2912
3021
|
}
|
|
2913
3022
|
}
|
|
2914
3023
|
},
|
|
3024
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
2915
3025
|
name: "Neutralizing Gas",
|
|
2916
3026
|
rating: 3.5,
|
|
2917
3027
|
num: 256,
|
|
@@ -2928,6 +3038,7 @@ export const Abilities = {
|
|
|
2928
3038
|
}
|
|
2929
3039
|
return accuracy;
|
|
2930
3040
|
},
|
|
3041
|
+
flags: {},
|
|
2931
3042
|
name: "No Guard",
|
|
2932
3043
|
rating: 4,
|
|
2933
3044
|
num: 99,
|
|
@@ -2950,6 +3061,7 @@ export const Abilities = {
|
|
|
2950
3061
|
if (move.typeChangerBoosted === this.effect)
|
|
2951
3062
|
return this.chainModify([4915, 4096]);
|
|
2952
3063
|
},
|
|
3064
|
+
flags: {},
|
|
2953
3065
|
name: "Normalize",
|
|
2954
3066
|
rating: 0,
|
|
2955
3067
|
num: 96,
|
|
@@ -2983,7 +3095,7 @@ export const Abilities = {
|
|
|
2983
3095
|
this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target);
|
|
2984
3096
|
}
|
|
2985
3097
|
},
|
|
2986
|
-
|
|
3098
|
+
flags: { breakable: 1 },
|
|
2987
3099
|
name: "Oblivious",
|
|
2988
3100
|
rating: 1.5,
|
|
2989
3101
|
num: 12,
|
|
@@ -3004,6 +3116,7 @@ export const Abilities = {
|
|
|
3004
3116
|
return;
|
|
3005
3117
|
this.boost(positiveBoosts, pokemon);
|
|
3006
3118
|
},
|
|
3119
|
+
flags: {},
|
|
3007
3120
|
name: "Opportunist",
|
|
3008
3121
|
rating: 3,
|
|
3009
3122
|
num: 290,
|
|
@@ -3024,6 +3137,7 @@ export const Abilities = {
|
|
|
3024
3137
|
return this.chainModify([5461, 4096]);
|
|
3025
3138
|
}
|
|
3026
3139
|
},
|
|
3140
|
+
flags: {},
|
|
3027
3141
|
name: "Orichalcum Pulse",
|
|
3028
3142
|
rating: 4.5,
|
|
3029
3143
|
num: 288,
|
|
@@ -3040,7 +3154,7 @@ export const Abilities = {
|
|
|
3040
3154
|
return null;
|
|
3041
3155
|
}
|
|
3042
3156
|
},
|
|
3043
|
-
|
|
3157
|
+
flags: { breakable: 1 },
|
|
3044
3158
|
name: "Overcoat",
|
|
3045
3159
|
rating: 2,
|
|
3046
3160
|
num: 142,
|
|
@@ -3060,6 +3174,7 @@ export const Abilities = {
|
|
|
3060
3174
|
return this.chainModify(1.5);
|
|
3061
3175
|
}
|
|
3062
3176
|
},
|
|
3177
|
+
flags: {},
|
|
3063
3178
|
name: "Overgrow",
|
|
3064
3179
|
rating: 2,
|
|
3065
3180
|
num: 65,
|
|
@@ -3086,7 +3201,7 @@ export const Abilities = {
|
|
|
3086
3201
|
this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', '[of] ' + target);
|
|
3087
3202
|
}
|
|
3088
3203
|
},
|
|
3089
|
-
|
|
3204
|
+
flags: { breakable: 1 },
|
|
3090
3205
|
name: "Own Tempo",
|
|
3091
3206
|
rating: 1.5,
|
|
3092
3207
|
num: 20,
|
|
@@ -3106,6 +3221,7 @@ export const Abilities = {
|
|
|
3106
3221
|
return secondaries.filter(effect => effect.volatileStatus === 'flinch');
|
|
3107
3222
|
}
|
|
3108
3223
|
},
|
|
3224
|
+
flags: {},
|
|
3109
3225
|
name: "Parental Bond",
|
|
3110
3226
|
rating: 4.5,
|
|
3111
3227
|
num: 185,
|
|
@@ -3148,7 +3264,7 @@ export const Abilities = {
|
|
|
3148
3264
|
}
|
|
3149
3265
|
return false;
|
|
3150
3266
|
},
|
|
3151
|
-
|
|
3267
|
+
flags: { breakable: 1 },
|
|
3152
3268
|
name: "Pastel Veil",
|
|
3153
3269
|
rating: 2,
|
|
3154
3270
|
num: 257,
|
|
@@ -3168,6 +3284,7 @@ export const Abilities = {
|
|
|
3168
3284
|
pokemon.addVolatile('perishsong');
|
|
3169
3285
|
}
|
|
3170
3286
|
},
|
|
3287
|
+
flags: {},
|
|
3171
3288
|
name: "Perish Body",
|
|
3172
3289
|
rating: 1,
|
|
3173
3290
|
num: 253,
|
|
@@ -3190,6 +3307,7 @@ export const Abilities = {
|
|
|
3190
3307
|
this.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source);
|
|
3191
3308
|
}
|
|
3192
3309
|
},
|
|
3310
|
+
flags: {},
|
|
3193
3311
|
name: "Pickpocket",
|
|
3194
3312
|
rating: 1,
|
|
3195
3313
|
num: 124,
|
|
@@ -3209,6 +3327,7 @@ export const Abilities = {
|
|
|
3209
3327
|
this.add('-item', pokemon, this.dex.items.get(item), '[from] ability: Pickup');
|
|
3210
3328
|
pokemon.setItem(item);
|
|
3211
3329
|
},
|
|
3330
|
+
flags: {},
|
|
3212
3331
|
name: "Pickup",
|
|
3213
3332
|
rating: 0.5,
|
|
3214
3333
|
num: 53,
|
|
@@ -3230,6 +3349,7 @@ export const Abilities = {
|
|
|
3230
3349
|
if (move.typeChangerBoosted === this.effect)
|
|
3231
3350
|
return this.chainModify([4915, 4096]);
|
|
3232
3351
|
},
|
|
3352
|
+
flags: {},
|
|
3233
3353
|
name: "Pixilate",
|
|
3234
3354
|
rating: 4,
|
|
3235
3355
|
num: 182,
|
|
@@ -3243,6 +3363,7 @@ export const Abilities = {
|
|
|
3243
3363
|
}
|
|
3244
3364
|
}
|
|
3245
3365
|
},
|
|
3366
|
+
flags: {},
|
|
3246
3367
|
name: "Plus",
|
|
3247
3368
|
rating: 0,
|
|
3248
3369
|
num: 57,
|
|
@@ -3255,6 +3376,7 @@ export const Abilities = {
|
|
|
3255
3376
|
return false;
|
|
3256
3377
|
}
|
|
3257
3378
|
},
|
|
3379
|
+
flags: {},
|
|
3258
3380
|
name: "Poison Heal",
|
|
3259
3381
|
rating: 4,
|
|
3260
3382
|
num: 90,
|
|
@@ -3267,18 +3389,22 @@ export const Abilities = {
|
|
|
3267
3389
|
}
|
|
3268
3390
|
}
|
|
3269
3391
|
},
|
|
3392
|
+
flags: {},
|
|
3270
3393
|
name: "Poison Point",
|
|
3271
3394
|
rating: 1.5,
|
|
3272
3395
|
num: 38,
|
|
3273
3396
|
},
|
|
3274
3397
|
poisonpuppeteer: {
|
|
3275
3398
|
onAnyAfterSetStatus(status, target, source, effect) {
|
|
3399
|
+
if (source.baseSpecies.name !== "Pecharunt")
|
|
3400
|
+
return;
|
|
3276
3401
|
if (source !== this.effectState.target || target === source || effect.effectType !== 'Move')
|
|
3277
3402
|
return;
|
|
3278
3403
|
if (status.id === 'psn' || status.id === 'tox') {
|
|
3279
3404
|
target.addVolatile('confusion');
|
|
3280
3405
|
}
|
|
3281
3406
|
},
|
|
3407
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 },
|
|
3282
3408
|
name: "Poison Puppeteer",
|
|
3283
3409
|
rating: 3,
|
|
3284
3410
|
num: 310,
|
|
@@ -3294,6 +3420,7 @@ export const Abilities = {
|
|
|
3294
3420
|
}
|
|
3295
3421
|
}
|
|
3296
3422
|
},
|
|
3423
|
+
flags: {},
|
|
3297
3424
|
name: "Poison Touch",
|
|
3298
3425
|
rating: 2,
|
|
3299
3426
|
num: 143,
|
|
@@ -3313,7 +3440,7 @@ export const Abilities = {
|
|
|
3313
3440
|
pokemon.maxhp = newMaxHP;
|
|
3314
3441
|
this.add('-heal', pokemon, pokemon.getHealth, '[silent]');
|
|
3315
3442
|
},
|
|
3316
|
-
|
|
3443
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
3317
3444
|
name: "Power Construct",
|
|
3318
3445
|
rating: 5,
|
|
3319
3446
|
num: 211,
|
|
@@ -3323,15 +3450,13 @@ export const Abilities = {
|
|
|
3323
3450
|
if (!this.effectState.target.hp)
|
|
3324
3451
|
return;
|
|
3325
3452
|
const ability = target.getAbility();
|
|
3326
|
-
|
|
3327
|
-
'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard',
|
|
3328
|
-
];
|
|
3329
|
-
if (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability))
|
|
3453
|
+
if (ability.flags['noreceiver'] || ability.id === 'noability')
|
|
3330
3454
|
return;
|
|
3331
3455
|
if (this.effectState.target.setAbility(ability)) {
|
|
3332
3456
|
this.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target);
|
|
3333
3457
|
}
|
|
3334
3458
|
},
|
|
3459
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
|
|
3335
3460
|
name: "Power of Alchemy",
|
|
3336
3461
|
rating: 0,
|
|
3337
3462
|
num: 223,
|
|
@@ -3344,6 +3469,7 @@ export const Abilities = {
|
|
|
3344
3469
|
return this.chainModify([5325, 4096]);
|
|
3345
3470
|
}
|
|
3346
3471
|
},
|
|
3472
|
+
flags: {},
|
|
3347
3473
|
name: "Power Spot",
|
|
3348
3474
|
rating: 0,
|
|
3349
3475
|
num: 249,
|
|
@@ -3355,6 +3481,7 @@ export const Abilities = {
|
|
|
3355
3481
|
return priority + 1;
|
|
3356
3482
|
}
|
|
3357
3483
|
},
|
|
3484
|
+
flags: {},
|
|
3358
3485
|
name: "Prankster",
|
|
3359
3486
|
rating: 4,
|
|
3360
3487
|
num: 158,
|
|
@@ -3368,6 +3495,7 @@ export const Abilities = {
|
|
|
3368
3495
|
return;
|
|
3369
3496
|
return 1;
|
|
3370
3497
|
},
|
|
3498
|
+
flags: {},
|
|
3371
3499
|
name: "Pressure",
|
|
3372
3500
|
rating: 2.5,
|
|
3373
3501
|
num: 46,
|
|
@@ -3394,6 +3522,7 @@ export const Abilities = {
|
|
|
3394
3522
|
}
|
|
3395
3523
|
this.field.clearWeather();
|
|
3396
3524
|
},
|
|
3525
|
+
flags: {},
|
|
3397
3526
|
name: "Primordial Sea",
|
|
3398
3527
|
rating: 4.5,
|
|
3399
3528
|
num: 189,
|
|
@@ -3405,6 +3534,7 @@ export const Abilities = {
|
|
|
3405
3534
|
return this.chainModify(0.75);
|
|
3406
3535
|
}
|
|
3407
3536
|
},
|
|
3537
|
+
flags: {},
|
|
3408
3538
|
name: "Prism Armor",
|
|
3409
3539
|
rating: 3,
|
|
3410
3540
|
num: 232,
|
|
@@ -3415,6 +3545,7 @@ export const Abilities = {
|
|
|
3415
3545
|
// most of the implementation is in Battle#getTarget
|
|
3416
3546
|
move.tracksTarget = move.target !== 'scripted';
|
|
3417
3547
|
},
|
|
3548
|
+
flags: {},
|
|
3418
3549
|
name: "Propeller Tail",
|
|
3419
3550
|
rating: 0,
|
|
3420
3551
|
num: 239,
|
|
@@ -3436,6 +3567,7 @@ export const Abilities = {
|
|
|
3436
3567
|
onSwitchIn(pokemon) {
|
|
3437
3568
|
delete this.effectState.protean;
|
|
3438
3569
|
},
|
|
3570
|
+
flags: {},
|
|
3439
3571
|
name: "Protean",
|
|
3440
3572
|
rating: 4,
|
|
3441
3573
|
num: 168,
|
|
@@ -3445,8 +3577,6 @@ export const Abilities = {
|
|
|
3445
3577
|
this.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);
|
|
3446
3578
|
},
|
|
3447
3579
|
onWeatherChange(pokemon) {
|
|
3448
|
-
if (pokemon.transformed)
|
|
3449
|
-
return;
|
|
3450
3580
|
// Protosynthesis is not affected by Utility Umbrella
|
|
3451
3581
|
if (this.field.isWeather('sunnyday')) {
|
|
3452
3582
|
pokemon.addVolatile('protosynthesis');
|
|
@@ -3510,6 +3640,7 @@ export const Abilities = {
|
|
|
3510
3640
|
this.add('-end', pokemon, 'Protosynthesis');
|
|
3511
3641
|
},
|
|
3512
3642
|
},
|
|
3643
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
3513
3644
|
name: "Protosynthesis",
|
|
3514
3645
|
rating: 3,
|
|
3515
3646
|
num: 281,
|
|
@@ -3518,6 +3649,7 @@ export const Abilities = {
|
|
|
3518
3649
|
onStart(source) {
|
|
3519
3650
|
this.field.setTerrain('psychicterrain');
|
|
3520
3651
|
},
|
|
3652
|
+
flags: {},
|
|
3521
3653
|
name: "Psychic Surge",
|
|
3522
3654
|
rating: 4,
|
|
3523
3655
|
num: 227,
|
|
@@ -3536,7 +3668,7 @@ export const Abilities = {
|
|
|
3536
3668
|
return this.chainModify(0.5);
|
|
3537
3669
|
}
|
|
3538
3670
|
},
|
|
3539
|
-
|
|
3671
|
+
flags: { breakable: 1 },
|
|
3540
3672
|
name: "Punk Rock",
|
|
3541
3673
|
rating: 3.5,
|
|
3542
3674
|
num: 244,
|
|
@@ -3546,6 +3678,7 @@ export const Abilities = {
|
|
|
3546
3678
|
onModifyAtk(atk) {
|
|
3547
3679
|
return this.chainModify(2);
|
|
3548
3680
|
},
|
|
3681
|
+
flags: {},
|
|
3549
3682
|
name: "Pure Power",
|
|
3550
3683
|
rating: 5,
|
|
3551
3684
|
num: 74,
|
|
@@ -3577,7 +3710,7 @@ export const Abilities = {
|
|
|
3577
3710
|
return this.chainModify(0.5);
|
|
3578
3711
|
}
|
|
3579
3712
|
},
|
|
3580
|
-
|
|
3713
|
+
flags: { breakable: 1 },
|
|
3581
3714
|
name: "Purifying Salt",
|
|
3582
3715
|
rating: 4,
|
|
3583
3716
|
num: 272,
|
|
@@ -3587,8 +3720,6 @@ export const Abilities = {
|
|
|
3587
3720
|
this.singleEvent('TerrainChange', this.effect, this.effectState, pokemon);
|
|
3588
3721
|
},
|
|
3589
3722
|
onTerrainChange(pokemon) {
|
|
3590
|
-
if (pokemon.transformed)
|
|
3591
|
-
return;
|
|
3592
3723
|
if (this.field.isTerrain('electricterrain')) {
|
|
3593
3724
|
pokemon.addVolatile('quarkdrive');
|
|
3594
3725
|
}
|
|
@@ -3651,6 +3782,7 @@ export const Abilities = {
|
|
|
3651
3782
|
this.add('-end', pokemon, 'Quark Drive');
|
|
3652
3783
|
},
|
|
3653
3784
|
},
|
|
3785
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
|
|
3654
3786
|
name: "Quark Drive",
|
|
3655
3787
|
rating: 3,
|
|
3656
3788
|
num: 282,
|
|
@@ -3668,7 +3800,7 @@ export const Abilities = {
|
|
|
3668
3800
|
return false;
|
|
3669
3801
|
}
|
|
3670
3802
|
},
|
|
3671
|
-
|
|
3803
|
+
flags: { breakable: 1 },
|
|
3672
3804
|
name: "Queenly Majesty",
|
|
3673
3805
|
rating: 2.5,
|
|
3674
3806
|
num: 214,
|
|
@@ -3681,6 +3813,7 @@ export const Abilities = {
|
|
|
3681
3813
|
return 0.1;
|
|
3682
3814
|
}
|
|
3683
3815
|
},
|
|
3816
|
+
flags: {},
|
|
3684
3817
|
name: "Quick Draw",
|
|
3685
3818
|
rating: 2.5,
|
|
3686
3819
|
num: 259,
|
|
@@ -3691,6 +3824,7 @@ export const Abilities = {
|
|
|
3691
3824
|
return this.chainModify(1.5);
|
|
3692
3825
|
}
|
|
3693
3826
|
},
|
|
3827
|
+
flags: {},
|
|
3694
3828
|
name: "Quick Feet",
|
|
3695
3829
|
rating: 2.5,
|
|
3696
3830
|
num: 95,
|
|
@@ -3703,6 +3837,7 @@ export const Abilities = {
|
|
|
3703
3837
|
this.heal(target.baseMaxhp / 16);
|
|
3704
3838
|
}
|
|
3705
3839
|
},
|
|
3840
|
+
flags: {},
|
|
3706
3841
|
name: "Rain Dish",
|
|
3707
3842
|
rating: 1.5,
|
|
3708
3843
|
num: 44,
|
|
@@ -3718,6 +3853,7 @@ export const Abilities = {
|
|
|
3718
3853
|
this.boost({ spe: 1 });
|
|
3719
3854
|
}
|
|
3720
3855
|
},
|
|
3856
|
+
flags: {},
|
|
3721
3857
|
name: "Rattled",
|
|
3722
3858
|
rating: 1,
|
|
3723
3859
|
num: 155,
|
|
@@ -3727,15 +3863,13 @@ export const Abilities = {
|
|
|
3727
3863
|
if (!this.effectState.target.hp)
|
|
3728
3864
|
return;
|
|
3729
3865
|
const ability = target.getAbility();
|
|
3730
|
-
|
|
3731
|
-
'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard',
|
|
3732
|
-
];
|
|
3733
|
-
if (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability))
|
|
3866
|
+
if (ability.flags['noreceiver'] || ability.id === 'noability')
|
|
3734
3867
|
return;
|
|
3735
3868
|
if (this.effectState.target.setAbility(ability)) {
|
|
3736
3869
|
this.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', '[of] ' + target);
|
|
3737
3870
|
}
|
|
3738
3871
|
},
|
|
3872
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
|
|
3739
3873
|
name: "Receiver",
|
|
3740
3874
|
rating: 0,
|
|
3741
3875
|
num: 222,
|
|
@@ -3748,6 +3882,7 @@ export const Abilities = {
|
|
|
3748
3882
|
return this.chainModify([4915, 4096]);
|
|
3749
3883
|
}
|
|
3750
3884
|
},
|
|
3885
|
+
flags: {},
|
|
3751
3886
|
name: "Reckless",
|
|
3752
3887
|
rating: 3,
|
|
3753
3888
|
num: 120,
|
|
@@ -3769,6 +3904,7 @@ export const Abilities = {
|
|
|
3769
3904
|
if (move.typeChangerBoosted === this.effect)
|
|
3770
3905
|
return this.chainModify([4915, 4096]);
|
|
3771
3906
|
},
|
|
3907
|
+
flags: {},
|
|
3772
3908
|
name: "Refrigerate",
|
|
3773
3909
|
rating: 4,
|
|
3774
3910
|
num: 174,
|
|
@@ -3777,6 +3913,7 @@ export const Abilities = {
|
|
|
3777
3913
|
onSwitchOut(pokemon) {
|
|
3778
3914
|
pokemon.heal(pokemon.baseMaxhp / 3);
|
|
3779
3915
|
},
|
|
3916
|
+
flags: {},
|
|
3780
3917
|
name: "Regenerator",
|
|
3781
3918
|
rating: 4.5,
|
|
3782
3919
|
num: 144,
|
|
@@ -3817,6 +3954,7 @@ export const Abilities = {
|
|
|
3817
3954
|
// Record if the pokemon ate a berry to resist the attack
|
|
3818
3955
|
pokemon.abilityState.berryWeaken = weakenBerries.includes(item.name);
|
|
3819
3956
|
},
|
|
3957
|
+
flags: {},
|
|
3820
3958
|
name: "Ripen",
|
|
3821
3959
|
rating: 2,
|
|
3822
3960
|
num: 247,
|
|
@@ -3835,13 +3973,14 @@ export const Abilities = {
|
|
|
3835
3973
|
}
|
|
3836
3974
|
}
|
|
3837
3975
|
},
|
|
3976
|
+
flags: {},
|
|
3838
3977
|
name: "Rivalry",
|
|
3839
3978
|
rating: 0,
|
|
3840
3979
|
num: 79,
|
|
3841
3980
|
},
|
|
3842
3981
|
rkssystem: {
|
|
3843
3982
|
// RKS System's type-changing itself is implemented in statuses.js
|
|
3844
|
-
|
|
3983
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
3845
3984
|
name: "RKS System",
|
|
3846
3985
|
rating: 4,
|
|
3847
3986
|
num: 225,
|
|
@@ -3855,6 +3994,7 @@ export const Abilities = {
|
|
|
3855
3994
|
return null;
|
|
3856
3995
|
}
|
|
3857
3996
|
},
|
|
3997
|
+
flags: {},
|
|
3858
3998
|
name: "Rock Head",
|
|
3859
3999
|
rating: 3,
|
|
3860
4000
|
num: 69,
|
|
@@ -3874,6 +4014,7 @@ export const Abilities = {
|
|
|
3874
4014
|
return this.chainModify(1.5);
|
|
3875
4015
|
}
|
|
3876
4016
|
},
|
|
4017
|
+
flags: {},
|
|
3877
4018
|
name: "Rocky Payload",
|
|
3878
4019
|
rating: 3.5,
|
|
3879
4020
|
num: 276,
|
|
@@ -3885,11 +4026,13 @@ export const Abilities = {
|
|
|
3885
4026
|
this.damage(source.baseMaxhp / 8, source, target);
|
|
3886
4027
|
}
|
|
3887
4028
|
},
|
|
4029
|
+
flags: {},
|
|
3888
4030
|
name: "Rough Skin",
|
|
3889
4031
|
rating: 2.5,
|
|
3890
4032
|
num: 24,
|
|
3891
4033
|
},
|
|
3892
4034
|
runaway: {
|
|
4035
|
+
flags: {},
|
|
3893
4036
|
name: "Run Away",
|
|
3894
4037
|
rating: 0,
|
|
3895
4038
|
num: 50,
|
|
@@ -3908,6 +4051,7 @@ export const Abilities = {
|
|
|
3908
4051
|
if (type === 'sandstorm')
|
|
3909
4052
|
return false;
|
|
3910
4053
|
},
|
|
4054
|
+
flags: {},
|
|
3911
4055
|
name: "Sand Force",
|
|
3912
4056
|
rating: 2,
|
|
3913
4057
|
num: 159,
|
|
@@ -3922,6 +4066,7 @@ export const Abilities = {
|
|
|
3922
4066
|
if (type === 'sandstorm')
|
|
3923
4067
|
return false;
|
|
3924
4068
|
},
|
|
4069
|
+
flags: {},
|
|
3925
4070
|
name: "Sand Rush",
|
|
3926
4071
|
rating: 3,
|
|
3927
4072
|
num: 146,
|
|
@@ -3930,6 +4075,7 @@ export const Abilities = {
|
|
|
3930
4075
|
onDamagingHit(damage, target, source, move) {
|
|
3931
4076
|
this.field.setWeather('sandstorm');
|
|
3932
4077
|
},
|
|
4078
|
+
flags: {},
|
|
3933
4079
|
name: "Sand Spit",
|
|
3934
4080
|
rating: 1,
|
|
3935
4081
|
num: 245,
|
|
@@ -3938,6 +4084,7 @@ export const Abilities = {
|
|
|
3938
4084
|
onStart(source) {
|
|
3939
4085
|
this.field.setWeather('sandstorm');
|
|
3940
4086
|
},
|
|
4087
|
+
flags: {},
|
|
3941
4088
|
name: "Sand Stream",
|
|
3942
4089
|
rating: 4,
|
|
3943
4090
|
num: 45,
|
|
@@ -3956,7 +4103,7 @@ export const Abilities = {
|
|
|
3956
4103
|
return this.chainModify([3277, 4096]);
|
|
3957
4104
|
}
|
|
3958
4105
|
},
|
|
3959
|
-
|
|
4106
|
+
flags: { breakable: 1 },
|
|
3960
4107
|
name: "Sand Veil",
|
|
3961
4108
|
rating: 1.5,
|
|
3962
4109
|
num: 8,
|
|
@@ -3978,7 +4125,7 @@ export const Abilities = {
|
|
|
3978
4125
|
this.boost({ atk: 1 }, this.effectState.target);
|
|
3979
4126
|
}
|
|
3980
4127
|
},
|
|
3981
|
-
|
|
4128
|
+
flags: { breakable: 1 },
|
|
3982
4129
|
name: "Sap Sipper",
|
|
3983
4130
|
rating: 3,
|
|
3984
4131
|
num: 157,
|
|
@@ -4014,7 +4161,7 @@ export const Abilities = {
|
|
|
4014
4161
|
}
|
|
4015
4162
|
}
|
|
4016
4163
|
},
|
|
4017
|
-
|
|
4164
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
4018
4165
|
name: "Schooling",
|
|
4019
4166
|
rating: 3,
|
|
4020
4167
|
num: 208,
|
|
@@ -4035,6 +4182,7 @@ export const Abilities = {
|
|
|
4035
4182
|
this.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', '[of] ' + target);
|
|
4036
4183
|
}
|
|
4037
4184
|
},
|
|
4185
|
+
flags: {},
|
|
4038
4186
|
name: "Scrappy",
|
|
4039
4187
|
rating: 3,
|
|
4040
4188
|
num: 113,
|
|
@@ -4054,6 +4202,7 @@ export const Abilities = {
|
|
|
4054
4202
|
}
|
|
4055
4203
|
}
|
|
4056
4204
|
},
|
|
4205
|
+
flags: {},
|
|
4057
4206
|
name: "Screen Cleaner",
|
|
4058
4207
|
rating: 2,
|
|
4059
4208
|
num: 251,
|
|
@@ -4062,6 +4211,7 @@ export const Abilities = {
|
|
|
4062
4211
|
onDamagingHit(damage, target, source, move) {
|
|
4063
4212
|
this.field.setTerrain('grassyterrain');
|
|
4064
4213
|
},
|
|
4214
|
+
flags: {},
|
|
4065
4215
|
name: "Seed Sower",
|
|
4066
4216
|
rating: 2.5,
|
|
4067
4217
|
num: 269,
|
|
@@ -4079,6 +4229,7 @@ export const Abilities = {
|
|
|
4079
4229
|
if (move.self?.chance)
|
|
4080
4230
|
move.self.chance *= 2;
|
|
4081
4231
|
},
|
|
4232
|
+
flags: {},
|
|
4082
4233
|
name: "Serene Grace",
|
|
4083
4234
|
rating: 3.5,
|
|
4084
4235
|
num: 32,
|
|
@@ -4090,6 +4241,7 @@ export const Abilities = {
|
|
|
4090
4241
|
return this.chainModify(0.5);
|
|
4091
4242
|
}
|
|
4092
4243
|
},
|
|
4244
|
+
flags: {},
|
|
4093
4245
|
name: "Shadow Shield",
|
|
4094
4246
|
rating: 3.5,
|
|
4095
4247
|
num: 231,
|
|
@@ -4109,6 +4261,7 @@ export const Abilities = {
|
|
|
4109
4261
|
pokemon.maybeTrapped = true;
|
|
4110
4262
|
}
|
|
4111
4263
|
},
|
|
4264
|
+
flags: {},
|
|
4112
4265
|
name: "Shadow Tag",
|
|
4113
4266
|
rating: 5,
|
|
4114
4267
|
num: 23,
|
|
@@ -4121,6 +4274,7 @@ export const Abilities = {
|
|
|
4121
4274
|
return this.chainModify(1.5);
|
|
4122
4275
|
}
|
|
4123
4276
|
},
|
|
4277
|
+
flags: {},
|
|
4124
4278
|
name: "Sharpness",
|
|
4125
4279
|
rating: 3.5,
|
|
4126
4280
|
num: 292,
|
|
@@ -4135,6 +4289,7 @@ export const Abilities = {
|
|
|
4135
4289
|
pokemon.cureStatus();
|
|
4136
4290
|
}
|
|
4137
4291
|
},
|
|
4292
|
+
flags: {},
|
|
4138
4293
|
name: "Shed Skin",
|
|
4139
4294
|
rating: 3,
|
|
4140
4295
|
num: 61,
|
|
@@ -4156,13 +4311,14 @@ export const Abilities = {
|
|
|
4156
4311
|
if (move.hasSheerForce)
|
|
4157
4312
|
return this.chainModify([5325, 4096]);
|
|
4158
4313
|
},
|
|
4314
|
+
flags: {},
|
|
4159
4315
|
name: "Sheer Force",
|
|
4160
4316
|
rating: 3.5,
|
|
4161
4317
|
num: 125,
|
|
4162
4318
|
},
|
|
4163
4319
|
shellarmor: {
|
|
4164
4320
|
onCriticalHit: false,
|
|
4165
|
-
|
|
4321
|
+
flags: { breakable: 1 },
|
|
4166
4322
|
name: "Shell Armor",
|
|
4167
4323
|
rating: 1,
|
|
4168
4324
|
num: 75,
|
|
@@ -4172,7 +4328,7 @@ export const Abilities = {
|
|
|
4172
4328
|
this.debug('Shield Dust prevent secondary');
|
|
4173
4329
|
return secondaries.filter(effect => !!(effect.self || effect.dustproof));
|
|
4174
4330
|
},
|
|
4175
|
-
|
|
4331
|
+
flags: { breakable: 1 },
|
|
4176
4332
|
name: "Shield Dust",
|
|
4177
4333
|
rating: 2,
|
|
4178
4334
|
num: 19,
|
|
@@ -4223,7 +4379,7 @@ export const Abilities = {
|
|
|
4223
4379
|
this.add('-immune', target, '[from] ability: Shields Down');
|
|
4224
4380
|
return null;
|
|
4225
4381
|
},
|
|
4226
|
-
|
|
4382
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
4227
4383
|
name: "Shields Down",
|
|
4228
4384
|
rating: 3,
|
|
4229
4385
|
num: 197,
|
|
@@ -4237,7 +4393,7 @@ export const Abilities = {
|
|
|
4237
4393
|
boost[i] *= 2;
|
|
4238
4394
|
}
|
|
4239
4395
|
},
|
|
4240
|
-
|
|
4396
|
+
flags: { breakable: 1 },
|
|
4241
4397
|
name: "Simple",
|
|
4242
4398
|
rating: 4,
|
|
4243
4399
|
num: 86,
|
|
@@ -4251,6 +4407,7 @@ export const Abilities = {
|
|
|
4251
4407
|
delete move.multiaccuracy;
|
|
4252
4408
|
}
|
|
4253
4409
|
},
|
|
4410
|
+
flags: {},
|
|
4254
4411
|
name: "Skill Link",
|
|
4255
4412
|
rating: 3,
|
|
4256
4413
|
num: 92,
|
|
@@ -4281,6 +4438,7 @@ export const Abilities = {
|
|
|
4281
4438
|
this.add('-end', target, 'Slow Start');
|
|
4282
4439
|
},
|
|
4283
4440
|
},
|
|
4441
|
+
flags: {},
|
|
4284
4442
|
name: "Slow Start",
|
|
4285
4443
|
rating: -1,
|
|
4286
4444
|
num: 112,
|
|
@@ -4291,6 +4449,7 @@ export const Abilities = {
|
|
|
4291
4449
|
return this.chainModify(2);
|
|
4292
4450
|
}
|
|
4293
4451
|
},
|
|
4452
|
+
flags: {},
|
|
4294
4453
|
name: "Slush Rush",
|
|
4295
4454
|
rating: 3,
|
|
4296
4455
|
num: 202,
|
|
@@ -4302,6 +4461,7 @@ export const Abilities = {
|
|
|
4302
4461
|
return this.chainModify(1.5);
|
|
4303
4462
|
}
|
|
4304
4463
|
},
|
|
4464
|
+
flags: {},
|
|
4305
4465
|
name: "Sniper",
|
|
4306
4466
|
rating: 2,
|
|
4307
4467
|
num: 97,
|
|
@@ -4320,7 +4480,7 @@ export const Abilities = {
|
|
|
4320
4480
|
return this.chainModify([3277, 4096]);
|
|
4321
4481
|
}
|
|
4322
4482
|
},
|
|
4323
|
-
|
|
4483
|
+
flags: { breakable: 1 },
|
|
4324
4484
|
name: "Snow Cloak",
|
|
4325
4485
|
rating: 1.5,
|
|
4326
4486
|
num: 81,
|
|
@@ -4329,6 +4489,7 @@ export const Abilities = {
|
|
|
4329
4489
|
onStart(source) {
|
|
4330
4490
|
this.field.setWeather('snow');
|
|
4331
4491
|
},
|
|
4492
|
+
flags: {},
|
|
4332
4493
|
name: "Snow Warning",
|
|
4333
4494
|
rating: 4,
|
|
4334
4495
|
num: 117,
|
|
@@ -4347,6 +4508,7 @@ export const Abilities = {
|
|
|
4347
4508
|
this.damage(target.baseMaxhp / 8, target, target);
|
|
4348
4509
|
}
|
|
4349
4510
|
},
|
|
4511
|
+
flags: {},
|
|
4350
4512
|
name: "Solar Power",
|
|
4351
4513
|
rating: 2,
|
|
4352
4514
|
num: 94,
|
|
@@ -4358,7 +4520,7 @@ export const Abilities = {
|
|
|
4358
4520
|
return this.chainModify(0.75);
|
|
4359
4521
|
}
|
|
4360
4522
|
},
|
|
4361
|
-
|
|
4523
|
+
flags: { breakable: 1 },
|
|
4362
4524
|
name: "Solid Rock",
|
|
4363
4525
|
rating: 3,
|
|
4364
4526
|
num: 116,
|
|
@@ -4368,6 +4530,7 @@ export const Abilities = {
|
|
|
4368
4530
|
onAnyFaint() {
|
|
4369
4531
|
this.boost({ spa: 1 }, this.effectState.target);
|
|
4370
4532
|
},
|
|
4533
|
+
flags: {},
|
|
4371
4534
|
name: "Soul-Heart",
|
|
4372
4535
|
rating: 3.5,
|
|
4373
4536
|
num: 220,
|
|
@@ -4384,7 +4547,7 @@ export const Abilities = {
|
|
|
4384
4547
|
this.add('-immune', this.effectState.target, '[from] ability: Soundproof');
|
|
4385
4548
|
}
|
|
4386
4549
|
},
|
|
4387
|
-
|
|
4550
|
+
flags: { breakable: 1 },
|
|
4388
4551
|
name: "Soundproof",
|
|
4389
4552
|
rating: 2,
|
|
4390
4553
|
num: 43,
|
|
@@ -4397,6 +4560,7 @@ export const Abilities = {
|
|
|
4397
4560
|
this.boost({ spe: 1 });
|
|
4398
4561
|
}
|
|
4399
4562
|
},
|
|
4563
|
+
flags: {},
|
|
4400
4564
|
name: "Speed Boost",
|
|
4401
4565
|
rating: 4.5,
|
|
4402
4566
|
num: 3,
|
|
@@ -4416,12 +4580,14 @@ export const Abilities = {
|
|
|
4416
4580
|
return this.chainModify(2);
|
|
4417
4581
|
}
|
|
4418
4582
|
},
|
|
4583
|
+
flags: {},
|
|
4419
4584
|
name: "Stakeout",
|
|
4420
4585
|
rating: 4.5,
|
|
4421
4586
|
num: 198,
|
|
4422
4587
|
},
|
|
4423
4588
|
stall: {
|
|
4424
4589
|
onFractionalPriority: -0.1,
|
|
4590
|
+
flags: {},
|
|
4425
4591
|
name: "Stall",
|
|
4426
4592
|
rating: -1,
|
|
4427
4593
|
num: 100,
|
|
@@ -4432,6 +4598,7 @@ export const Abilities = {
|
|
|
4432
4598
|
// most of the implementation is in Battle#getTarget
|
|
4433
4599
|
move.tracksTarget = move.target !== 'scripted';
|
|
4434
4600
|
},
|
|
4601
|
+
flags: {},
|
|
4435
4602
|
name: "Stalwart",
|
|
4436
4603
|
rating: 0,
|
|
4437
4604
|
num: 242,
|
|
@@ -4440,6 +4607,7 @@ export const Abilities = {
|
|
|
4440
4607
|
onDamagingHit(damage, target, source, effect) {
|
|
4441
4608
|
this.boost({ def: 1 });
|
|
4442
4609
|
},
|
|
4610
|
+
flags: {},
|
|
4443
4611
|
name: "Stamina",
|
|
4444
4612
|
rating: 4,
|
|
4445
4613
|
num: 192,
|
|
@@ -4455,7 +4623,7 @@ export const Abilities = {
|
|
|
4455
4623
|
if (attacker.species.name !== targetForme)
|
|
4456
4624
|
attacker.formeChange(targetForme);
|
|
4457
4625
|
},
|
|
4458
|
-
|
|
4626
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
4459
4627
|
name: "Stance Change",
|
|
4460
4628
|
rating: 4,
|
|
4461
4629
|
num: 176,
|
|
@@ -4468,6 +4636,7 @@ export const Abilities = {
|
|
|
4468
4636
|
}
|
|
4469
4637
|
}
|
|
4470
4638
|
},
|
|
4639
|
+
flags: {},
|
|
4471
4640
|
name: "Static",
|
|
4472
4641
|
rating: 2,
|
|
4473
4642
|
num: 9,
|
|
@@ -4476,6 +4645,7 @@ export const Abilities = {
|
|
|
4476
4645
|
onFlinch(pokemon) {
|
|
4477
4646
|
this.boost({ spe: 1 });
|
|
4478
4647
|
},
|
|
4648
|
+
flags: {},
|
|
4479
4649
|
name: "Steadfast",
|
|
4480
4650
|
rating: 1,
|
|
4481
4651
|
num: 80,
|
|
@@ -4486,6 +4656,7 @@ export const Abilities = {
|
|
|
4486
4656
|
this.boost({ spe: 6 });
|
|
4487
4657
|
}
|
|
4488
4658
|
},
|
|
4659
|
+
flags: {},
|
|
4489
4660
|
name: "Steam Engine",
|
|
4490
4661
|
rating: 2,
|
|
4491
4662
|
num: 243,
|
|
@@ -4505,6 +4676,7 @@ export const Abilities = {
|
|
|
4505
4676
|
return this.chainModify(1.5);
|
|
4506
4677
|
}
|
|
4507
4678
|
},
|
|
4679
|
+
flags: {},
|
|
4508
4680
|
name: "Steelworker",
|
|
4509
4681
|
rating: 3.5,
|
|
4510
4682
|
num: 200,
|
|
@@ -4517,6 +4689,7 @@ export const Abilities = {
|
|
|
4517
4689
|
return this.chainModify(1.5);
|
|
4518
4690
|
}
|
|
4519
4691
|
},
|
|
4692
|
+
flags: {},
|
|
4520
4693
|
name: "Steely Spirit",
|
|
4521
4694
|
rating: 3.5,
|
|
4522
4695
|
num: 252,
|
|
@@ -4538,6 +4711,7 @@ export const Abilities = {
|
|
|
4538
4711
|
});
|
|
4539
4712
|
}
|
|
4540
4713
|
},
|
|
4714
|
+
flags: {},
|
|
4541
4715
|
name: "Stench",
|
|
4542
4716
|
rating: 0.5,
|
|
4543
4717
|
num: 1,
|
|
@@ -4553,7 +4727,7 @@ export const Abilities = {
|
|
|
4553
4727
|
return false;
|
|
4554
4728
|
}
|
|
4555
4729
|
},
|
|
4556
|
-
|
|
4730
|
+
flags: { breakable: 1 },
|
|
4557
4731
|
name: "Sticky Hold",
|
|
4558
4732
|
rating: 1.5,
|
|
4559
4733
|
num: 60,
|
|
@@ -4580,7 +4754,7 @@ export const Abilities = {
|
|
|
4580
4754
|
return this.effectState.target;
|
|
4581
4755
|
}
|
|
4582
4756
|
},
|
|
4583
|
-
|
|
4757
|
+
flags: { breakable: 1 },
|
|
4584
4758
|
name: "Storm Drain",
|
|
4585
4759
|
rating: 3,
|
|
4586
4760
|
num: 114,
|
|
@@ -4592,6 +4766,7 @@ export const Abilities = {
|
|
|
4592
4766
|
return this.chainModify(1.5);
|
|
4593
4767
|
}
|
|
4594
4768
|
},
|
|
4769
|
+
flags: {},
|
|
4595
4770
|
name: "Strong Jaw",
|
|
4596
4771
|
rating: 3.5,
|
|
4597
4772
|
num: 173,
|
|
@@ -4610,7 +4785,7 @@ export const Abilities = {
|
|
|
4610
4785
|
return target.hp - 1;
|
|
4611
4786
|
}
|
|
4612
4787
|
},
|
|
4613
|
-
|
|
4788
|
+
flags: { breakable: 1 },
|
|
4614
4789
|
name: "Sturdy",
|
|
4615
4790
|
rating: 3,
|
|
4616
4791
|
num: 5,
|
|
@@ -4621,7 +4796,7 @@ export const Abilities = {
|
|
|
4621
4796
|
this.add('-activate', pokemon, 'ability: Suction Cups');
|
|
4622
4797
|
return null;
|
|
4623
4798
|
},
|
|
4624
|
-
|
|
4799
|
+
flags: { breakable: 1 },
|
|
4625
4800
|
name: "Suction Cups",
|
|
4626
4801
|
rating: 1,
|
|
4627
4802
|
num: 21,
|
|
@@ -4630,6 +4805,7 @@ export const Abilities = {
|
|
|
4630
4805
|
onModifyCritRatio(critRatio) {
|
|
4631
4806
|
return critRatio + 1;
|
|
4632
4807
|
},
|
|
4808
|
+
flags: {},
|
|
4633
4809
|
name: "Super Luck",
|
|
4634
4810
|
rating: 1.5,
|
|
4635
4811
|
num: 105,
|
|
@@ -4654,6 +4830,7 @@ export const Abilities = {
|
|
|
4654
4830
|
}
|
|
4655
4831
|
}
|
|
4656
4832
|
},
|
|
4833
|
+
flags: {},
|
|
4657
4834
|
name: "Supersweet Syrup",
|
|
4658
4835
|
rating: 1.5,
|
|
4659
4836
|
num: 306,
|
|
@@ -4678,6 +4855,7 @@ export const Abilities = {
|
|
|
4678
4855
|
return this.chainModify([powMod[this.effectState.fallen], 4096]);
|
|
4679
4856
|
}
|
|
4680
4857
|
},
|
|
4858
|
+
flags: {},
|
|
4681
4859
|
name: "Supreme Overlord",
|
|
4682
4860
|
rating: 4,
|
|
4683
4861
|
num: 293,
|
|
@@ -4688,6 +4866,7 @@ export const Abilities = {
|
|
|
4688
4866
|
return this.chainModify(2);
|
|
4689
4867
|
}
|
|
4690
4868
|
},
|
|
4869
|
+
flags: {},
|
|
4691
4870
|
name: "Surge Surfer",
|
|
4692
4871
|
rating: 3,
|
|
4693
4872
|
num: 207,
|
|
@@ -4707,12 +4886,12 @@ export const Abilities = {
|
|
|
4707
4886
|
return this.chainModify(1.5);
|
|
4708
4887
|
}
|
|
4709
4888
|
},
|
|
4889
|
+
flags: {},
|
|
4710
4890
|
name: "Swarm",
|
|
4711
4891
|
rating: 2,
|
|
4712
4892
|
num: 68,
|
|
4713
4893
|
},
|
|
4714
4894
|
sweetveil: {
|
|
4715
|
-
name: "Sweet Veil",
|
|
4716
4895
|
onAllySetStatus(status, target, source, effect) {
|
|
4717
4896
|
if (status.id === 'slp') {
|
|
4718
4897
|
this.debug('Sweet Veil interrupts sleep');
|
|
@@ -4729,7 +4908,8 @@ export const Abilities = {
|
|
|
4729
4908
|
return null;
|
|
4730
4909
|
}
|
|
4731
4910
|
},
|
|
4732
|
-
|
|
4911
|
+
flags: { breakable: 1 },
|
|
4912
|
+
name: "Sweet Veil",
|
|
4733
4913
|
rating: 2,
|
|
4734
4914
|
num: 175,
|
|
4735
4915
|
},
|
|
@@ -4739,6 +4919,7 @@ export const Abilities = {
|
|
|
4739
4919
|
return this.chainModify(2);
|
|
4740
4920
|
}
|
|
4741
4921
|
},
|
|
4922
|
+
flags: {},
|
|
4742
4923
|
name: "Swift Swim",
|
|
4743
4924
|
rating: 3,
|
|
4744
4925
|
num: 33,
|
|
@@ -4758,6 +4939,7 @@ export const Abilities = {
|
|
|
4758
4939
|
}
|
|
4759
4940
|
this.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon);
|
|
4760
4941
|
},
|
|
4942
|
+
flags: {},
|
|
4761
4943
|
name: "Symbiosis",
|
|
4762
4944
|
rating: 0,
|
|
4763
4945
|
num: 180,
|
|
@@ -4775,6 +4957,7 @@ export const Abilities = {
|
|
|
4775
4957
|
// and show messages when activating against it.
|
|
4776
4958
|
source.trySetStatus(status, target, { status: status.id, id: 'synchronize' });
|
|
4777
4959
|
},
|
|
4960
|
+
flags: {},
|
|
4778
4961
|
name: "Synchronize",
|
|
4779
4962
|
rating: 2,
|
|
4780
4963
|
num: 28,
|
|
@@ -4796,6 +4979,7 @@ export const Abilities = {
|
|
|
4796
4979
|
this.debug('Sword of Ruin Def drop');
|
|
4797
4980
|
return this.chainModify(0.75);
|
|
4798
4981
|
},
|
|
4982
|
+
flags: {},
|
|
4799
4983
|
name: "Sword of Ruin",
|
|
4800
4984
|
rating: 4.5,
|
|
4801
4985
|
num: 285,
|
|
@@ -4817,6 +5001,7 @@ export const Abilities = {
|
|
|
4817
5001
|
this.debug('Tablets of Ruin Atk drop');
|
|
4818
5002
|
return this.chainModify(0.75);
|
|
4819
5003
|
},
|
|
5004
|
+
flags: {},
|
|
4820
5005
|
name: "Tablets of Ruin",
|
|
4821
5006
|
rating: 4.5,
|
|
4822
5007
|
num: 284,
|
|
@@ -4831,7 +5016,7 @@ export const Abilities = {
|
|
|
4831
5016
|
return this.chainModify(0.5);
|
|
4832
5017
|
}
|
|
4833
5018
|
},
|
|
4834
|
-
|
|
5019
|
+
flags: { breakable: 1 },
|
|
4835
5020
|
name: "Tangled Feet",
|
|
4836
5021
|
rating: 1,
|
|
4837
5022
|
num: 77,
|
|
@@ -4843,6 +5028,7 @@ export const Abilities = {
|
|
|
4843
5028
|
this.boost({ spe: -1 }, source, target, null, true);
|
|
4844
5029
|
}
|
|
4845
5030
|
},
|
|
5031
|
+
flags: {},
|
|
4846
5032
|
name: "Tangling Hair",
|
|
4847
5033
|
rating: 2,
|
|
4848
5034
|
num: 221,
|
|
@@ -4857,6 +5043,7 @@ export const Abilities = {
|
|
|
4857
5043
|
return this.chainModify(1.5);
|
|
4858
5044
|
}
|
|
4859
5045
|
},
|
|
5046
|
+
flags: {},
|
|
4860
5047
|
name: "Technician",
|
|
4861
5048
|
rating: 3.5,
|
|
4862
5049
|
num: 101,
|
|
@@ -4868,7 +5055,7 @@ export const Abilities = {
|
|
|
4868
5055
|
return null;
|
|
4869
5056
|
}
|
|
4870
5057
|
},
|
|
4871
|
-
|
|
5058
|
+
flags: { breakable: 1 },
|
|
4872
5059
|
name: "Telepathy",
|
|
4873
5060
|
rating: 0,
|
|
4874
5061
|
num: 140,
|
|
@@ -4883,13 +5070,14 @@ export const Abilities = {
|
|
|
4883
5070
|
this.field.clearTerrain();
|
|
4884
5071
|
}
|
|
4885
5072
|
},
|
|
5073
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1 },
|
|
4886
5074
|
name: "Teraform Zero",
|
|
4887
5075
|
rating: 3,
|
|
4888
5076
|
num: 309,
|
|
4889
5077
|
},
|
|
4890
5078
|
terashell: {
|
|
4891
5079
|
onEffectiveness(typeMod, target, type, move) {
|
|
4892
|
-
if (!target || target.
|
|
5080
|
+
if (!target || target.baseSpecies.name !== 'Terapagos-Terastal')
|
|
4893
5081
|
return;
|
|
4894
5082
|
if (this.effectState.resisted)
|
|
4895
5083
|
return -1; // all hits of multi-hit move should be not very effective
|
|
@@ -4906,21 +5094,21 @@ export const Abilities = {
|
|
|
4906
5094
|
onAnyAfterMove() {
|
|
4907
5095
|
this.effectState.resisted = false;
|
|
4908
5096
|
},
|
|
4909
|
-
|
|
5097
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, breakable: 1 },
|
|
4910
5098
|
name: "Tera Shell",
|
|
4911
5099
|
rating: 3.5,
|
|
4912
5100
|
num: 308,
|
|
4913
5101
|
},
|
|
4914
5102
|
terashift: {
|
|
4915
5103
|
onPreStart(pokemon) {
|
|
4916
|
-
if (pokemon.baseSpecies.baseSpecies !== 'Terapagos'
|
|
5104
|
+
if (pokemon.baseSpecies.baseSpecies !== 'Terapagos')
|
|
4917
5105
|
return;
|
|
4918
5106
|
if (pokemon.species.forme !== 'Terastal') {
|
|
4919
5107
|
this.add('-activate', pokemon, 'ability: Tera Shift');
|
|
4920
5108
|
pokemon.formeChange('Terapagos-Terastal', this.effect, true);
|
|
4921
5109
|
}
|
|
4922
5110
|
},
|
|
4923
|
-
|
|
5111
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1 },
|
|
4924
5112
|
name: "Tera Shift",
|
|
4925
5113
|
rating: 3,
|
|
4926
5114
|
num: 307,
|
|
@@ -4932,6 +5120,7 @@ export const Abilities = {
|
|
|
4932
5120
|
onModifyMove(move) {
|
|
4933
5121
|
move.ignoreAbility = true;
|
|
4934
5122
|
},
|
|
5123
|
+
flags: {},
|
|
4935
5124
|
name: "Teravolt",
|
|
4936
5125
|
rating: 3,
|
|
4937
5126
|
num: 164,
|
|
@@ -4956,6 +5145,7 @@ export const Abilities = {
|
|
|
4956
5145
|
}
|
|
4957
5146
|
return false;
|
|
4958
5147
|
},
|
|
5148
|
+
flags: { breakable: 1 },
|
|
4959
5149
|
name: "Thermal Exchange",
|
|
4960
5150
|
rating: 2.5,
|
|
4961
5151
|
num: 270,
|
|
@@ -4975,7 +5165,7 @@ export const Abilities = {
|
|
|
4975
5165
|
return this.chainModify(0.5);
|
|
4976
5166
|
}
|
|
4977
5167
|
},
|
|
4978
|
-
|
|
5168
|
+
flags: { breakable: 1 },
|
|
4979
5169
|
name: "Thick Fat",
|
|
4980
5170
|
rating: 3.5,
|
|
4981
5171
|
num: 47,
|
|
@@ -4987,6 +5177,7 @@ export const Abilities = {
|
|
|
4987
5177
|
return this.chainModify(2);
|
|
4988
5178
|
}
|
|
4989
5179
|
},
|
|
5180
|
+
flags: {},
|
|
4990
5181
|
name: "Tinted Lens",
|
|
4991
5182
|
rating: 4,
|
|
4992
5183
|
num: 110,
|
|
@@ -5006,6 +5197,7 @@ export const Abilities = {
|
|
|
5006
5197
|
return this.chainModify(1.5);
|
|
5007
5198
|
}
|
|
5008
5199
|
},
|
|
5200
|
+
flags: {},
|
|
5009
5201
|
name: "Torrent",
|
|
5010
5202
|
rating: 2,
|
|
5011
5203
|
num: 67,
|
|
@@ -5017,6 +5209,7 @@ export const Abilities = {
|
|
|
5017
5209
|
return this.chainModify([5325, 4096]);
|
|
5018
5210
|
}
|
|
5019
5211
|
},
|
|
5212
|
+
flags: {},
|
|
5020
5213
|
name: "Tough Claws",
|
|
5021
5214
|
rating: 3.5,
|
|
5022
5215
|
num: 181,
|
|
@@ -5028,6 +5221,7 @@ export const Abilities = {
|
|
|
5028
5221
|
return this.chainModify(1.5);
|
|
5029
5222
|
}
|
|
5030
5223
|
},
|
|
5224
|
+
flags: {},
|
|
5031
5225
|
name: "Toxic Boost",
|
|
5032
5226
|
rating: 3,
|
|
5033
5227
|
num: 137,
|
|
@@ -5041,6 +5235,7 @@ export const Abilities = {
|
|
|
5041
5235
|
target.trySetStatus('tox', source);
|
|
5042
5236
|
}
|
|
5043
5237
|
},
|
|
5238
|
+
flags: {},
|
|
5044
5239
|
name: "Toxic Chain",
|
|
5045
5240
|
rating: 4.5,
|
|
5046
5241
|
num: 305,
|
|
@@ -5054,6 +5249,7 @@ export const Abilities = {
|
|
|
5054
5249
|
side.addSideCondition('toxicspikes', target);
|
|
5055
5250
|
}
|
|
5056
5251
|
},
|
|
5252
|
+
flags: {},
|
|
5057
5253
|
name: "Toxic Debris",
|
|
5058
5254
|
rating: 3.5,
|
|
5059
5255
|
num: 295,
|
|
@@ -5074,11 +5270,7 @@ export const Abilities = {
|
|
|
5074
5270
|
onUpdate(pokemon) {
|
|
5075
5271
|
if (!pokemon.isStarted || this.effectState.gaveUp)
|
|
5076
5272
|
return;
|
|
5077
|
-
const
|
|
5078
|
-
// Zen Mode included here for compatability with Gen 5-6
|
|
5079
|
-
'noability', 'commander', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',
|
|
5080
|
-
];
|
|
5081
|
-
const possibleTargets = pokemon.adjacentFoes().filter(target => (!target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability)));
|
|
5273
|
+
const possibleTargets = pokemon.adjacentFoes().filter(target => !target.getAbility().flags['notrace'] && target.ability !== 'noability');
|
|
5082
5274
|
if (!possibleTargets.length)
|
|
5083
5275
|
return;
|
|
5084
5276
|
const target = this.sample(possibleTargets);
|
|
@@ -5087,6 +5279,7 @@ export const Abilities = {
|
|
|
5087
5279
|
this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);
|
|
5088
5280
|
}
|
|
5089
5281
|
},
|
|
5282
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1 },
|
|
5090
5283
|
name: "Trace",
|
|
5091
5284
|
rating: 2.5,
|
|
5092
5285
|
num: 36,
|
|
@@ -5106,6 +5299,7 @@ export const Abilities = {
|
|
|
5106
5299
|
return this.chainModify([5325, 4096]);
|
|
5107
5300
|
}
|
|
5108
5301
|
},
|
|
5302
|
+
flags: {},
|
|
5109
5303
|
name: "Transistor",
|
|
5110
5304
|
rating: 3.5,
|
|
5111
5305
|
num: 262,
|
|
@@ -5115,6 +5309,7 @@ export const Abilities = {
|
|
|
5115
5309
|
if (move?.flags['heal'])
|
|
5116
5310
|
return priority + 3;
|
|
5117
5311
|
},
|
|
5312
|
+
flags: {},
|
|
5118
5313
|
name: "Triage",
|
|
5119
5314
|
rating: 3.5,
|
|
5120
5315
|
num: 205,
|
|
@@ -5135,6 +5330,7 @@ export const Abilities = {
|
|
|
5135
5330
|
pokemon.addVolatile('truant');
|
|
5136
5331
|
},
|
|
5137
5332
|
condition: {},
|
|
5333
|
+
flags: {},
|
|
5138
5334
|
name: "Truant",
|
|
5139
5335
|
rating: -1,
|
|
5140
5336
|
num: 54,
|
|
@@ -5146,12 +5342,12 @@ export const Abilities = {
|
|
|
5146
5342
|
onModifyMove(move) {
|
|
5147
5343
|
move.ignoreAbility = true;
|
|
5148
5344
|
},
|
|
5345
|
+
flags: {},
|
|
5149
5346
|
name: "Turboblaze",
|
|
5150
5347
|
rating: 3,
|
|
5151
5348
|
num: 163,
|
|
5152
5349
|
},
|
|
5153
5350
|
unaware: {
|
|
5154
|
-
name: "Unaware",
|
|
5155
5351
|
onAnyModifyBoost(boosts, pokemon) {
|
|
5156
5352
|
const unawareUser = this.effectState.target;
|
|
5157
5353
|
if (unawareUser === pokemon)
|
|
@@ -5168,7 +5364,8 @@ export const Abilities = {
|
|
|
5168
5364
|
boosts['accuracy'] = 0;
|
|
5169
5365
|
}
|
|
5170
5366
|
},
|
|
5171
|
-
|
|
5367
|
+
flags: { breakable: 1 },
|
|
5368
|
+
name: "Unaware",
|
|
5172
5369
|
rating: 4,
|
|
5173
5370
|
num: 109,
|
|
5174
5371
|
},
|
|
@@ -5191,6 +5388,7 @@ export const Abilities = {
|
|
|
5191
5388
|
}
|
|
5192
5389
|
},
|
|
5193
5390
|
},
|
|
5391
|
+
flags: {},
|
|
5194
5392
|
name: "Unburden",
|
|
5195
5393
|
rating: 3.5,
|
|
5196
5394
|
num: 84,
|
|
@@ -5212,6 +5410,7 @@ export const Abilities = {
|
|
|
5212
5410
|
onFoeTryEatItem() {
|
|
5213
5411
|
return !this.effectState.unnerved;
|
|
5214
5412
|
},
|
|
5413
|
+
flags: {},
|
|
5215
5414
|
name: "Unnerve",
|
|
5216
5415
|
rating: 1,
|
|
5217
5416
|
num: 127,
|
|
@@ -5221,6 +5420,7 @@ export const Abilities = {
|
|
|
5221
5420
|
if (move.flags['contact'])
|
|
5222
5421
|
delete move.flags['protect'];
|
|
5223
5422
|
},
|
|
5423
|
+
flags: {},
|
|
5224
5424
|
name: "Unseen Fist",
|
|
5225
5425
|
rating: 2,
|
|
5226
5426
|
num: 260,
|
|
@@ -5242,6 +5442,7 @@ export const Abilities = {
|
|
|
5242
5442
|
this.debug('Vessel of Ruin SpA drop');
|
|
5243
5443
|
return this.chainModify(0.75);
|
|
5244
5444
|
},
|
|
5445
|
+
flags: {},
|
|
5245
5446
|
name: "Vessel of Ruin",
|
|
5246
5447
|
rating: 4.5,
|
|
5247
5448
|
num: 284,
|
|
@@ -5253,6 +5454,7 @@ export const Abilities = {
|
|
|
5253
5454
|
return this.chainModify([4506, 4096]);
|
|
5254
5455
|
}
|
|
5255
5456
|
},
|
|
5457
|
+
flags: {},
|
|
5256
5458
|
name: "Victory Star",
|
|
5257
5459
|
rating: 2,
|
|
5258
5460
|
num: 162,
|
|
@@ -5278,7 +5480,7 @@ export const Abilities = {
|
|
|
5278
5480
|
return null;
|
|
5279
5481
|
}
|
|
5280
5482
|
},
|
|
5281
|
-
|
|
5483
|
+
flags: { breakable: 1 },
|
|
5282
5484
|
name: "Vital Spirit",
|
|
5283
5485
|
rating: 1.5,
|
|
5284
5486
|
num: 72,
|
|
@@ -5292,18 +5494,15 @@ export const Abilities = {
|
|
|
5292
5494
|
return null;
|
|
5293
5495
|
}
|
|
5294
5496
|
},
|
|
5295
|
-
|
|
5497
|
+
flags: { breakable: 1 },
|
|
5296
5498
|
name: "Volt Absorb",
|
|
5297
5499
|
rating: 3.5,
|
|
5298
5500
|
num: 10,
|
|
5299
5501
|
},
|
|
5300
5502
|
wanderingspirit: {
|
|
5301
5503
|
onDamagingHit(damage, target, source, move) {
|
|
5302
|
-
|
|
5303
|
-
if (source.getAbility().isPermanent || additionalBannedAbilities.includes(source.ability) ||
|
|
5304
|
-
target.volatiles['dynamax']) {
|
|
5504
|
+
if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax'])
|
|
5305
5505
|
return;
|
|
5306
|
-
}
|
|
5307
5506
|
if (this.checkMoveMakesContact(move, source, target)) {
|
|
5308
5507
|
const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability);
|
|
5309
5508
|
if (!targetCanBeSet)
|
|
@@ -5320,6 +5519,7 @@ export const Abilities = {
|
|
|
5320
5519
|
target.setAbility(sourceAbility);
|
|
5321
5520
|
}
|
|
5322
5521
|
},
|
|
5522
|
+
flags: {},
|
|
5323
5523
|
name: "Wandering Spirit",
|
|
5324
5524
|
rating: 2.5,
|
|
5325
5525
|
num: 254,
|
|
@@ -5333,7 +5533,7 @@ export const Abilities = {
|
|
|
5333
5533
|
return null;
|
|
5334
5534
|
}
|
|
5335
5535
|
},
|
|
5336
|
-
|
|
5536
|
+
flags: { breakable: 1 },
|
|
5337
5537
|
name: "Water Absorb",
|
|
5338
5538
|
rating: 3.5,
|
|
5339
5539
|
num: 11,
|
|
@@ -5375,7 +5575,7 @@ export const Abilities = {
|
|
|
5375
5575
|
}
|
|
5376
5576
|
return false;
|
|
5377
5577
|
},
|
|
5378
|
-
|
|
5578
|
+
flags: { breakable: 1 },
|
|
5379
5579
|
name: "Water Bubble",
|
|
5380
5580
|
rating: 4.5,
|
|
5381
5581
|
num: 199,
|
|
@@ -5386,6 +5586,7 @@ export const Abilities = {
|
|
|
5386
5586
|
this.boost({ def: 2 });
|
|
5387
5587
|
}
|
|
5388
5588
|
},
|
|
5589
|
+
flags: {},
|
|
5389
5590
|
name: "Water Compaction",
|
|
5390
5591
|
rating: 1.5,
|
|
5391
5592
|
num: 195,
|
|
@@ -5405,7 +5606,7 @@ export const Abilities = {
|
|
|
5405
5606
|
}
|
|
5406
5607
|
return false;
|
|
5407
5608
|
},
|
|
5408
|
-
|
|
5609
|
+
flags: { breakable: 1 },
|
|
5409
5610
|
name: "Water Veil",
|
|
5410
5611
|
rating: 2,
|
|
5411
5612
|
num: 41,
|
|
@@ -5416,6 +5617,7 @@ export const Abilities = {
|
|
|
5416
5617
|
this.boost({ def: -1, spe: 2 }, target, target);
|
|
5417
5618
|
}
|
|
5418
5619
|
},
|
|
5620
|
+
flags: {},
|
|
5419
5621
|
name: "Weak Armor",
|
|
5420
5622
|
rating: 1,
|
|
5421
5623
|
num: 133,
|
|
@@ -5429,7 +5631,7 @@ export const Abilities = {
|
|
|
5429
5631
|
return null;
|
|
5430
5632
|
}
|
|
5431
5633
|
},
|
|
5432
|
-
|
|
5634
|
+
flags: { breakable: 1 },
|
|
5433
5635
|
name: "Well-Baked Body",
|
|
5434
5636
|
rating: 3.5,
|
|
5435
5637
|
num: 273,
|
|
@@ -5450,7 +5652,7 @@ export const Abilities = {
|
|
|
5450
5652
|
this.add("-fail", target, "unboost", "[from] ability: White Smoke", "[of] " + target);
|
|
5451
5653
|
}
|
|
5452
5654
|
},
|
|
5453
|
-
|
|
5655
|
+
flags: { breakable: 1 },
|
|
5454
5656
|
name: "White Smoke",
|
|
5455
5657
|
rating: 2,
|
|
5456
5658
|
num: 73,
|
|
@@ -5467,6 +5669,7 @@ export const Abilities = {
|
|
|
5467
5669
|
target.switchFlag = true;
|
|
5468
5670
|
this.add('-activate', target, 'ability: Wimp Out');
|
|
5469
5671
|
},
|
|
5672
|
+
flags: {},
|
|
5470
5673
|
name: "Wimp Out",
|
|
5471
5674
|
rating: 1,
|
|
5472
5675
|
num: 193,
|
|
@@ -5484,6 +5687,7 @@ export const Abilities = {
|
|
|
5484
5687
|
pokemon.addVolatile('charge');
|
|
5485
5688
|
}
|
|
5486
5689
|
},
|
|
5690
|
+
flags: {},
|
|
5487
5691
|
name: "Wind Power",
|
|
5488
5692
|
rating: 1,
|
|
5489
5693
|
num: 277,
|
|
@@ -5508,7 +5712,7 @@ export const Abilities = {
|
|
|
5508
5712
|
this.boost({ atk: 1 }, pokemon, pokemon);
|
|
5509
5713
|
}
|
|
5510
5714
|
},
|
|
5511
|
-
|
|
5715
|
+
flags: { breakable: 1 },
|
|
5512
5716
|
name: "Wind Rider",
|
|
5513
5717
|
rating: 3.5,
|
|
5514
5718
|
// We do not want Brambleghast to get Infiltrator in Randbats
|
|
@@ -5531,7 +5735,7 @@ export const Abilities = {
|
|
|
5531
5735
|
return null;
|
|
5532
5736
|
}
|
|
5533
5737
|
},
|
|
5534
|
-
|
|
5738
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, failskillswap: 1, breakable: 1 },
|
|
5535
5739
|
name: "Wonder Guard",
|
|
5536
5740
|
rating: 5,
|
|
5537
5741
|
num: 25,
|
|
@@ -5544,7 +5748,7 @@ export const Abilities = {
|
|
|
5544
5748
|
return 50;
|
|
5545
5749
|
}
|
|
5546
5750
|
},
|
|
5547
|
-
|
|
5751
|
+
flags: { breakable: 1 },
|
|
5548
5752
|
name: "Wonder Skin",
|
|
5549
5753
|
rating: 2,
|
|
5550
5754
|
num: 147,
|
|
@@ -5589,14 +5793,14 @@ export const Abilities = {
|
|
|
5589
5793
|
}
|
|
5590
5794
|
},
|
|
5591
5795
|
},
|
|
5592
|
-
|
|
5796
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
|
|
5593
5797
|
name: "Zen Mode",
|
|
5594
5798
|
rating: 0,
|
|
5595
5799
|
num: 161,
|
|
5596
5800
|
},
|
|
5597
5801
|
zerotohero: {
|
|
5598
5802
|
onSwitchOut(pokemon) {
|
|
5599
|
-
if (pokemon.baseSpecies.baseSpecies !== 'Palafin'
|
|
5803
|
+
if (pokemon.baseSpecies.baseSpecies !== 'Palafin')
|
|
5600
5804
|
return;
|
|
5601
5805
|
if (pokemon.species.forme !== 'Hero') {
|
|
5602
5806
|
pokemon.formeChange('Palafin-Hero', this.effect, true);
|
|
@@ -5609,14 +5813,14 @@ export const Abilities = {
|
|
|
5609
5813
|
if (!this.effectState.switchingIn)
|
|
5610
5814
|
return;
|
|
5611
5815
|
this.effectState.switchingIn = false;
|
|
5612
|
-
if (pokemon.baseSpecies.baseSpecies !== 'Palafin'
|
|
5816
|
+
if (pokemon.baseSpecies.baseSpecies !== 'Palafin')
|
|
5613
5817
|
return;
|
|
5614
5818
|
if (!this.effectState.heroMessageDisplayed && pokemon.species.forme === 'Hero') {
|
|
5615
5819
|
this.add('-activate', pokemon, 'ability: Zero to Hero');
|
|
5616
5820
|
this.effectState.heroMessageDisplayed = true;
|
|
5617
5821
|
}
|
|
5618
5822
|
},
|
|
5619
|
-
|
|
5823
|
+
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1 },
|
|
5620
5824
|
name: "Zero to Hero",
|
|
5621
5825
|
rating: 5,
|
|
5622
5826
|
num: 278,
|
|
@@ -5635,14 +5839,13 @@ export const Abilities = {
|
|
|
5635
5839
|
}
|
|
5636
5840
|
},
|
|
5637
5841
|
isNonstandard: "CAP",
|
|
5638
|
-
|
|
5842
|
+
flags: { breakable: 1 },
|
|
5639
5843
|
name: "Mountaineer",
|
|
5640
5844
|
rating: 3,
|
|
5641
5845
|
num: -2,
|
|
5642
5846
|
},
|
|
5643
5847
|
rebound: {
|
|
5644
5848
|
isNonstandard: "CAP",
|
|
5645
|
-
name: "Rebound",
|
|
5646
5849
|
onTryHitPriority: 1,
|
|
5647
5850
|
onTryHit(target, source, move) {
|
|
5648
5851
|
if (this.effectState.target.activeTurns)
|
|
@@ -5669,14 +5872,16 @@ export const Abilities = {
|
|
|
5669
5872
|
condition: {
|
|
5670
5873
|
duration: 1,
|
|
5671
5874
|
},
|
|
5672
|
-
|
|
5875
|
+
flags: { breakable: 1 },
|
|
5876
|
+
name: "Rebound",
|
|
5673
5877
|
rating: 3,
|
|
5674
5878
|
num: -3,
|
|
5675
5879
|
},
|
|
5676
5880
|
persistent: {
|
|
5677
5881
|
isNonstandard: "CAP",
|
|
5678
|
-
name: "Persistent",
|
|
5679
5882
|
// implemented in the corresponding move
|
|
5883
|
+
flags: {},
|
|
5884
|
+
name: "Persistent",
|
|
5680
5885
|
rating: 3,
|
|
5681
5886
|
num: -4,
|
|
5682
5887
|
},
|