@pkmn/sim 0.4.24 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/config/formats.js +238 -170
- package/build/config/formats.js.map +1 -1
- package/build/data/abilities.js +5 -1
- package/build/data/abilities.js.map +1 -1
- package/build/data/aliases.js +2 -2
- package/build/data/aliases.js.map +1 -1
- package/build/data/conditions.js +1 -0
- package/build/data/conditions.js.map +1 -1
- package/build/data/formats-data.js +16 -8
- package/build/data/formats-data.js.map +1 -1
- package/build/data/items.js +26 -2
- package/build/data/items.js.map +1 -1
- package/build/data/learnsets.js +34 -0
- package/build/data/learnsets.js.map +1 -1
- package/build/data/mods/gen2/formats-data.js +2 -2
- package/build/data/mods/gen2/formats-data.js.map +1 -1
- package/build/data/mods/gen3/formats-data.js +1 -1
- package/build/data/mods/gen3/formats-data.js.map +1 -1
- package/build/data/mods/gen6/pokedex.js +17 -17
- package/build/data/mods/gen6/pokedex.js.map +1 -1
- package/build/data/moves.js +4 -1
- package/build/data/moves.js.map +1 -1
- package/build/data/pokedex.js +33 -0
- package/build/data/pokedex.js.map +1 -1
- package/build/data/rulesets.js +39 -5
- package/build/data/rulesets.js.map +1 -1
- package/build/data/text/items.js +4 -0
- package/build/data/text/items.js.map +1 -1
- package/build/data/text/moves.js +1 -1
- package/build/data/text/moves.js.map +1 -1
- package/build/sim/battle-actions.js +1 -1
- package/build/sim/battle-actions.js.map +1 -1
- package/build/sim/dex-formats.js +1 -1
- package/build/sim/dex-formats.js.map +1 -1
- package/build/sim/dex-species.js +4 -3
- package/build/sim/dex-species.js.map +1 -1
- package/build/sim/pokemon.js +1 -1
- package/build/sim/pokemon.js.map +1 -1
- package/build/sim/team-validator.js +3 -0
- package/build/sim/team-validator.js.map +1 -1
- package/config/formats.ts +242 -171
- package/data/abilities.ts +3 -1
- package/data/aliases.ts +2 -2
- package/data/conditions.ts +1 -0
- package/data/formats-data.ts +16 -8
- package/data/items.ts +26 -2
- package/data/learnsets.ts +34 -0
- package/data/mods/gen2/formats-data.ts +2 -2
- package/data/mods/gen3/formats-data.ts +1 -1
- package/data/mods/gen6/pokedex.ts +17 -17
- package/data/moves.ts +4 -1
- package/data/pokedex.ts +33 -0
- package/data/rulesets.ts +35 -6
- package/data/text/items.ts +4 -0
- package/data/text/moves.ts +1 -1
- package/package.json +1 -1
- package/sim/battle-actions.ts +1 -1
- package/sim/dex-formats.ts +1 -1
- package/sim/dex-species.ts +4 -3
- package/sim/pokemon.ts +1 -1
- package/sim/team-validator.ts +3 -0
package/data/abilities.ts
CHANGED
|
@@ -2349,6 +2349,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
|
|
|
2349
2349
|
neutralizinggas: {
|
|
2350
2350
|
// Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility
|
|
2351
2351
|
onPreStart(pokemon) {
|
|
2352
|
+
if (pokemon.transformed) return;
|
|
2352
2353
|
this.add('-ability', pokemon, 'Neutralizing Gas');
|
|
2353
2354
|
pokemon.abilityState.ending = false;
|
|
2354
2355
|
for (const target of this.getAllActive()) {
|
|
@@ -2362,6 +2363,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
|
|
|
2362
2363
|
}
|
|
2363
2364
|
},
|
|
2364
2365
|
onEnd(source) {
|
|
2366
|
+
if (source.transformed) return;
|
|
2365
2367
|
for (const pokemon of this.getAllActive()) {
|
|
2366
2368
|
if (pokemon !== source && pokemon.hasAbility('Neutralizing Gas')) {
|
|
2367
2369
|
return;
|
|
@@ -2523,7 +2525,7 @@ export const Abilities: {[abilityid: string]: AbilityData} = {
|
|
|
2523
2525
|
parentalbond: {
|
|
2524
2526
|
onPrepareHit(source, target, move) {
|
|
2525
2527
|
if (move.category === 'Status' || move.selfdestruct || move.multihit) return;
|
|
2526
|
-
if (['endeavor', 'fling', 'iceball', 'rollout'].includes(move.id)) return;
|
|
2528
|
+
if (['dynamaxcannon', 'endeavor', 'fling', 'iceball', 'rollout'].includes(move.id)) return;
|
|
2527
2529
|
if (!move.flags['charge'] && !move.spreadHit && !move.isZ && !move.isMax) {
|
|
2528
2530
|
move.multihit = 2;
|
|
2529
2531
|
move.multihitType = 'parentalbond';
|
package/data/aliases.ts
CHANGED
|
@@ -67,8 +67,8 @@ export const Aliases: {[alias: string]: string} = {
|
|
|
67
67
|
gen6mono: "[Gen 6] Monotype",
|
|
68
68
|
gen6ag: "[Gen 6] Anything Goes",
|
|
69
69
|
crossevo: "[Gen 8] Cross Evolution",
|
|
70
|
-
omotm: "[Gen 8]
|
|
71
|
-
lcotm: "[Gen 8]
|
|
70
|
+
omotm: "[Gen 8] Revelationmons",
|
|
71
|
+
lcotm: "[Gen 8 BDSP] Balanced Hackmons",
|
|
72
72
|
|
|
73
73
|
// mega evos
|
|
74
74
|
fabio: "Ampharos-Mega",
|
package/data/conditions.ts
CHANGED
|
@@ -396,6 +396,7 @@ export const Conditions: {[k: string]: ConditionData} = {
|
|
|
396
396
|
if (data.source.isActive && data.source.hasItem('lifeorb') && this.gen >= 5) {
|
|
397
397
|
this.singleEvent('AfterMoveSecondarySelf', data.source.getItem(), data.source.itemState, data.source, target, data.source.getItem());
|
|
398
398
|
}
|
|
399
|
+
this.activeMove = null;
|
|
399
400
|
|
|
400
401
|
this.checkWin();
|
|
401
402
|
},
|
package/data/formats-data.ts
CHANGED
|
@@ -710,7 +710,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
710
710
|
randomBattleMoves: ["bravebird", "closecombat", "firstimpression", "knockoff", "swordsdance"],
|
|
711
711
|
randomBattleLevel: 82,
|
|
712
712
|
randomDoubleBattleMoves: ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "protect", "swordsdance"],
|
|
713
|
-
randomDoubleBattleLevel:
|
|
713
|
+
randomDoubleBattleLevel: 85,
|
|
714
714
|
randomBattleNoDynamaxMoves: ["bravebird", "closecombat", "firstimpression", "knockoff", "poisonjab", "swordsdance"],
|
|
715
715
|
tier: "NU",
|
|
716
716
|
doublesTier: "(DUU)",
|
|
@@ -1965,7 +1965,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
1965
1965
|
tier: "Illegal",
|
|
1966
1966
|
},
|
|
1967
1967
|
zigzagoon: {
|
|
1968
|
-
tier: "
|
|
1968
|
+
tier: "NFE",
|
|
1969
1969
|
},
|
|
1970
1970
|
zigzagoongalar: {
|
|
1971
1971
|
tier: "LC",
|
|
@@ -3443,7 +3443,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
3443
3443
|
},
|
|
3444
3444
|
audino: {
|
|
3445
3445
|
randomBattleMoves: ["healbell", "knockoff", "protect", "toxic", "wish"],
|
|
3446
|
-
randomBattleLevel:
|
|
3446
|
+
randomBattleLevel: 90,
|
|
3447
3447
|
randomDoubleBattleMoves: ["bodyslam", "healpulse", "helpinghand", "knockoff", "protect", "thunderwave"],
|
|
3448
3448
|
randomDoubleBattleLevel: 89,
|
|
3449
3449
|
tier: "PU",
|
|
@@ -3832,7 +3832,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
3832
3832
|
randomBattleMoves: ["bugbuzz", "gigadrain", "stickyweb", "thunder", "voltswitch"],
|
|
3833
3833
|
randomBattleLevel: 82,
|
|
3834
3834
|
randomDoubleBattleMoves: ["bugbuzz", "electroweb", "energyball", "protect", "stickyweb", "thunder"],
|
|
3835
|
-
randomDoubleBattleLevel:
|
|
3835
|
+
randomDoubleBattleLevel: 85,
|
|
3836
3836
|
tier: "PU",
|
|
3837
3837
|
doublesTier: "(DUU)",
|
|
3838
3838
|
},
|
|
@@ -3968,7 +3968,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
3968
3968
|
randomBattleLevel: 82,
|
|
3969
3969
|
randomDoubleBattleMoves: ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "uturn"],
|
|
3970
3970
|
randomDoubleBattleLevel: 84,
|
|
3971
|
-
tier: "
|
|
3971
|
+
tier: "UUBL",
|
|
3972
3972
|
doublesTier: "(DUU)",
|
|
3973
3973
|
},
|
|
3974
3974
|
druddigon: {
|
|
@@ -4167,7 +4167,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
4167
4167
|
randomBattleLevel: 80,
|
|
4168
4168
|
randomDoubleBattleMoves: ["dracometeor", "earthpower", "freezedry", "glaciate", "protect", "roost"],
|
|
4169
4169
|
randomDoubleBattleLevel: 78,
|
|
4170
|
-
tier: "
|
|
4170
|
+
tier: "Uber",
|
|
4171
4171
|
doublesTier: "DUU",
|
|
4172
4172
|
},
|
|
4173
4173
|
kyuremblack: {
|
|
@@ -4194,7 +4194,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
4194
4194
|
},
|
|
4195
4195
|
keldeoresolute: {
|
|
4196
4196
|
randomBattleMoves: ["airslash", "calmmind", "hydropump", "icywind", "scald", "secretsword", "substitute"],
|
|
4197
|
-
randomBattleLevel:
|
|
4197
|
+
randomBattleLevel: 79,
|
|
4198
4198
|
},
|
|
4199
4199
|
meloetta: {
|
|
4200
4200
|
isNonstandard: "Past",
|
|
@@ -5936,7 +5936,7 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
5936
5936
|
},
|
|
5937
5937
|
dracozolt: {
|
|
5938
5938
|
randomBattleMoves: ["aerialace", "boltbeak", "earthquake", "lowkick", "outrage"],
|
|
5939
|
-
randomBattleLevel:
|
|
5939
|
+
randomBattleLevel: 78,
|
|
5940
5940
|
randomDoubleBattleMoves: ["aerialace", "boltbeak", "dragonclaw", "highhorsepower", "rockslide"],
|
|
5941
5941
|
randomDoubleBattleLevel: 82,
|
|
5942
5942
|
randomBattleNoDynamaxMoves: ["boltbeak", "dragonclaw", "earthquake", "outrage"],
|
|
@@ -6410,6 +6410,14 @@ export const FormatsData: {[k: string]: SpeciesFormatsData} = {
|
|
|
6410
6410
|
isNonstandard: "CAP",
|
|
6411
6411
|
tier: "CAP",
|
|
6412
6412
|
},
|
|
6413
|
+
venomicon: {
|
|
6414
|
+
isNonstandard: "CAP",
|
|
6415
|
+
tier: "CAP",
|
|
6416
|
+
},
|
|
6417
|
+
venomiconepilogue: {
|
|
6418
|
+
isNonstandard: "CAP",
|
|
6419
|
+
tier: "CAP",
|
|
6420
|
+
},
|
|
6413
6421
|
pokestarsmeargle: {
|
|
6414
6422
|
isNonstandard: "Custom",
|
|
6415
6423
|
tier: "Illegal",
|
package/data/items.ts
CHANGED
|
@@ -1274,7 +1274,7 @@ export const Items: {[itemid: string]: ItemData} = {
|
|
|
1274
1274
|
fling: {
|
|
1275
1275
|
basePower: 30,
|
|
1276
1276
|
},
|
|
1277
|
-
num:
|
|
1277
|
+
num: 235,
|
|
1278
1278
|
gen: 2,
|
|
1279
1279
|
},
|
|
1280
1280
|
dragoniumz: {
|
|
@@ -3179,7 +3179,7 @@ export const Items: {[itemid: string]: ItemData} = {
|
|
|
3179
3179
|
if (!this.activeMove) return false;
|
|
3180
3180
|
if (this.activeMove.id !== 'knockoff' && this.activeMove.id !== 'thief' && this.activeMove.id !== 'covet') return false;
|
|
3181
3181
|
},
|
|
3182
|
-
num:
|
|
3182
|
+
num: 137,
|
|
3183
3183
|
gen: 2,
|
|
3184
3184
|
isNonstandard: "Past",
|
|
3185
3185
|
},
|
|
@@ -7107,4 +7107,28 @@ export const Items: {[itemid: string]: ItemData} = {
|
|
|
7107
7107
|
gen: 6,
|
|
7108
7108
|
isNonstandard: "CAP",
|
|
7109
7109
|
},
|
|
7110
|
+
vilevial: {
|
|
7111
|
+
name: "Vile Vial",
|
|
7112
|
+
spritenum: 752,
|
|
7113
|
+
fling: {
|
|
7114
|
+
basePower: 60,
|
|
7115
|
+
},
|
|
7116
|
+
onBasePowerPriority: 15,
|
|
7117
|
+
onBasePower(basePower, user, target, move) {
|
|
7118
|
+
if (user.baseSpecies.num === -66 && ['Poison', 'Flying'].includes(move.type)) {
|
|
7119
|
+
return this.chainModify([4915, 4096]);
|
|
7120
|
+
}
|
|
7121
|
+
},
|
|
7122
|
+
onTakeItem(item, pokemon, source) {
|
|
7123
|
+
if (source?.baseSpecies.num === -66 || pokemon.baseSpecies.num === -66) {
|
|
7124
|
+
return false;
|
|
7125
|
+
}
|
|
7126
|
+
return true;
|
|
7127
|
+
},
|
|
7128
|
+
forcedForme: "Venomicon-Epilogue",
|
|
7129
|
+
itemUser: ["Venomicon-Epilogue"],
|
|
7130
|
+
num: -2,
|
|
7131
|
+
gen: 8,
|
|
7132
|
+
isNonstandard: "CAP",
|
|
7133
|
+
},
|
|
7110
7134
|
};
|
package/data/learnsets.ts
CHANGED
|
@@ -82815,6 +82815,40 @@ export const Learnsets: {[speciesid: string]: LearnsetData} = {
|
|
|
82815
82815
|
watergun: ["8L1"],
|
|
82816
82816
|
},
|
|
82817
82817
|
},
|
|
82818
|
+
venomicon: {
|
|
82819
|
+
learnset: {
|
|
82820
|
+
acidarmor: ["8L1"],
|
|
82821
|
+
attract: ["8M"],
|
|
82822
|
+
bodypress: ["8M"],
|
|
82823
|
+
bravebird: ["8M"],
|
|
82824
|
+
coil: ["8L1"],
|
|
82825
|
+
discharge: ["8L1"],
|
|
82826
|
+
drillpeck: ["8L1"],
|
|
82827
|
+
earthpower: ["8M"],
|
|
82828
|
+
endure: ["8M"],
|
|
82829
|
+
facade: ["8M"],
|
|
82830
|
+
gunkshot: ["8M"],
|
|
82831
|
+
hurricane: ["8M"],
|
|
82832
|
+
imprison: ["8M"],
|
|
82833
|
+
knockoff: ["8L1"],
|
|
82834
|
+
mysticalfire: ["8M"],
|
|
82835
|
+
nastyplot: ["8M"],
|
|
82836
|
+
poisonjab: ["8M"],
|
|
82837
|
+
protect: ["8M"],
|
|
82838
|
+
rest: ["8M"],
|
|
82839
|
+
roost: ["8L1"],
|
|
82840
|
+
round: ["8M"],
|
|
82841
|
+
sleeptalk: ["8M"],
|
|
82842
|
+
sludgebomb: ["8M"],
|
|
82843
|
+
snore: ["8M"],
|
|
82844
|
+
stealthrock: ["8M"],
|
|
82845
|
+
substitute: ["8M"],
|
|
82846
|
+
swordsdance: ["8M"],
|
|
82847
|
+
thunderwave: ["8M"],
|
|
82848
|
+
toxic: ["8L1"],
|
|
82849
|
+
uturn: ["8M"],
|
|
82850
|
+
},
|
|
82851
|
+
},
|
|
82818
82852
|
pokestarsmeargle: {
|
|
82819
82853
|
eventData: [
|
|
82820
82854
|
{generation: 5, level: 60, gender: "M", abilities: ["owntempo"], moves: ["mindreader", "guillotine", "tailwhip", "gastroacid"]},
|
|
@@ -691,7 +691,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
|
|
|
691
691
|
tier: "LC",
|
|
692
692
|
},
|
|
693
693
|
azumarill: {
|
|
694
|
-
randomBattleMoves: ["
|
|
694
|
+
randomBattleMoves: ["perishsong", "rest", "surf", "whirlpool"],
|
|
695
695
|
tier: "NU",
|
|
696
696
|
},
|
|
697
697
|
sudowoodo: {
|
|
@@ -817,7 +817,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
|
|
|
817
817
|
tier: "LC",
|
|
818
818
|
},
|
|
819
819
|
octillery: {
|
|
820
|
-
randomBattleMoves: ["
|
|
820
|
+
randomBattleMoves: ["flamethrower", "hiddenpowerelectric", "icebeam", "rest", "sleeptalk", "surf"],
|
|
821
821
|
tier: "NU",
|
|
822
822
|
},
|
|
823
823
|
delibird: {
|
|
@@ -1364,7 +1364,7 @@ export const FormatsData: {[k: string]: ModdedSpeciesFormatsData} = {
|
|
|
1364
1364
|
tier: "Uber",
|
|
1365
1365
|
},
|
|
1366
1366
|
kyogre: {
|
|
1367
|
-
randomBattleMoves: ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"
|
|
1367
|
+
randomBattleMoves: ["calmmind", "icebeam", "rest", "sleeptalk", "surf", "thunder"],
|
|
1368
1368
|
tier: "Uber",
|
|
1369
1369
|
},
|
|
1370
1370
|
groudon: {
|
|
@@ -171,87 +171,87 @@ export const Pokedex: {[k: string]: ModdedSpeciesData} = {
|
|
|
171
171
|
arceusbug: {
|
|
172
172
|
inherit: true,
|
|
173
173
|
color: "Gray",
|
|
174
|
-
|
|
174
|
+
requiredItems: ["Insect Plate"],
|
|
175
175
|
},
|
|
176
176
|
arceusdark: {
|
|
177
177
|
inherit: true,
|
|
178
178
|
color: "Gray",
|
|
179
|
-
|
|
179
|
+
requiredItems: ["Dread Plate"],
|
|
180
180
|
},
|
|
181
181
|
arceusdragon: {
|
|
182
182
|
inherit: true,
|
|
183
183
|
color: "Gray",
|
|
184
|
-
|
|
184
|
+
requiredItems: ["Draco Plate"],
|
|
185
185
|
},
|
|
186
186
|
arceuselectric: {
|
|
187
187
|
inherit: true,
|
|
188
188
|
color: "Gray",
|
|
189
|
-
|
|
189
|
+
requiredItems: ["Zap Plate"],
|
|
190
190
|
},
|
|
191
191
|
arceusfairy: {
|
|
192
192
|
inherit: true,
|
|
193
193
|
color: "Gray",
|
|
194
|
-
|
|
194
|
+
requiredItems: ["Pixie Plate"],
|
|
195
195
|
},
|
|
196
196
|
arceusfighting: {
|
|
197
197
|
inherit: true,
|
|
198
198
|
color: "Gray",
|
|
199
|
-
|
|
199
|
+
requiredItems: ["Fist Plate"],
|
|
200
200
|
},
|
|
201
201
|
arceusfire: {
|
|
202
202
|
inherit: true,
|
|
203
203
|
color: "Gray",
|
|
204
|
-
|
|
204
|
+
requiredItems: ["Flame Plate"],
|
|
205
205
|
},
|
|
206
206
|
arceusflying: {
|
|
207
207
|
inherit: true,
|
|
208
208
|
color: "Gray",
|
|
209
|
-
|
|
209
|
+
requiredItems: ["Sky Plate"],
|
|
210
210
|
},
|
|
211
211
|
arceusghost: {
|
|
212
212
|
inherit: true,
|
|
213
213
|
color: "Gray",
|
|
214
|
-
|
|
214
|
+
requiredItems: ["Spooky Plate"],
|
|
215
215
|
},
|
|
216
216
|
arceusgrass: {
|
|
217
217
|
inherit: true,
|
|
218
218
|
color: "Gray",
|
|
219
|
-
|
|
219
|
+
requiredItems: ["Meadow Plate"],
|
|
220
220
|
},
|
|
221
221
|
arceusground: {
|
|
222
222
|
inherit: true,
|
|
223
223
|
color: "Gray",
|
|
224
|
-
|
|
224
|
+
requiredItems: ["Earth Plate"],
|
|
225
225
|
},
|
|
226
226
|
arceusice: {
|
|
227
227
|
inherit: true,
|
|
228
228
|
color: "Gray",
|
|
229
|
-
|
|
229
|
+
requiredItems: ["Icicle Plate"],
|
|
230
230
|
},
|
|
231
231
|
arceuspoison: {
|
|
232
232
|
inherit: true,
|
|
233
233
|
color: "Gray",
|
|
234
|
-
|
|
234
|
+
requiredItems: ["Toxic Plate"],
|
|
235
235
|
},
|
|
236
236
|
arceuspsychic: {
|
|
237
237
|
inherit: true,
|
|
238
238
|
color: "Gray",
|
|
239
|
-
|
|
239
|
+
requiredItems: ["Mind Plate"],
|
|
240
240
|
},
|
|
241
241
|
arceusrock: {
|
|
242
242
|
inherit: true,
|
|
243
243
|
color: "Gray",
|
|
244
|
-
|
|
244
|
+
requiredItems: ["Stone Plate"],
|
|
245
245
|
},
|
|
246
246
|
arceussteel: {
|
|
247
247
|
inherit: true,
|
|
248
248
|
color: "Gray",
|
|
249
|
-
|
|
249
|
+
requiredItems: ["Iron Plate"],
|
|
250
250
|
},
|
|
251
251
|
arceuswater: {
|
|
252
252
|
inherit: true,
|
|
253
253
|
color: "Gray",
|
|
254
|
-
|
|
254
|
+
requiredItems: ["Splash Plate"],
|
|
255
255
|
},
|
|
256
256
|
roggenrola: {
|
|
257
257
|
inherit: true,
|
package/data/moves.ts
CHANGED
|
@@ -11090,7 +11090,9 @@ export const Moves: {[moveid: string]: MoveData} = {
|
|
|
11090
11090
|
priority: 0,
|
|
11091
11091
|
flags: {protect: 1, bypasssub: 1, allyanim: 1},
|
|
11092
11092
|
onHit(target, source) {
|
|
11093
|
-
const disallowedMoves = [
|
|
11093
|
+
const disallowedMoves = [
|
|
11094
|
+
'behemothbash', 'behemothblade', 'chatter', 'dynamaxcannon', 'mimic', 'sketch', 'struggle', 'transform',
|
|
11095
|
+
];
|
|
11094
11096
|
const move = target.lastMove;
|
|
11095
11097
|
if (source.transformed || !move || disallowedMoves.includes(move.id) || source.moves.includes(move.id)) {
|
|
11096
11098
|
return false;
|
|
@@ -15857,6 +15859,7 @@ export const Moves: {[moveid: string]: MoveData} = {
|
|
|
15857
15859
|
onRestart(pokemon) {
|
|
15858
15860
|
if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) {
|
|
15859
15861
|
this.queue.cancelMove(pokemon);
|
|
15862
|
+
pokemon.removeVolatile('twoturnmove');
|
|
15860
15863
|
this.add('-start', pokemon, 'Smack Down');
|
|
15861
15864
|
}
|
|
15862
15865
|
},
|
package/data/pokedex.ts
CHANGED
|
@@ -16910,6 +16910,39 @@ export const Pokedex: {[speciesid: string]: SpeciesData} = {
|
|
|
16910
16910
|
eggGroups: ["Water 1", "Fairy"],
|
|
16911
16911
|
gen: 4,
|
|
16912
16912
|
},
|
|
16913
|
+
venomicon: {
|
|
16914
|
+
num: -66,
|
|
16915
|
+
name: "Venomicon",
|
|
16916
|
+
baseForme: "Prologue",
|
|
16917
|
+
types: ["Poison", "Flying"],
|
|
16918
|
+
gender: "N",
|
|
16919
|
+
baseStats: {hp: 85, atk: 70, def: 113, spa: 118, spd: 90, spe: 64},
|
|
16920
|
+
abilities: {0: "Stamina"},
|
|
16921
|
+
heightm: 0.8,
|
|
16922
|
+
weightkg: 11.5,
|
|
16923
|
+
color: "Purple",
|
|
16924
|
+
eggGroups: ["Undiscovered"],
|
|
16925
|
+
otherFormes: ["Venomicon-Epilogue"],
|
|
16926
|
+
formeOrder: ["Venomicon", "Venomicon-Epilogue"],
|
|
16927
|
+
gen: 8,
|
|
16928
|
+
},
|
|
16929
|
+
venomiconepilogue: {
|
|
16930
|
+
num: -66,
|
|
16931
|
+
name: "Venomicon-Epilogue",
|
|
16932
|
+
baseSpecies: "Venomicon",
|
|
16933
|
+
forme: "Epilogue",
|
|
16934
|
+
types: ["Poison", "Flying"],
|
|
16935
|
+
gender: "N",
|
|
16936
|
+
baseStats: {hp: 85, atk: 110, def: 85, spa: 55, spd: 85, spe: 120},
|
|
16937
|
+
abilities: {0: "Tinted Lens"},
|
|
16938
|
+
heightm: 0.8,
|
|
16939
|
+
weightkg: 12.4,
|
|
16940
|
+
color: "Purple",
|
|
16941
|
+
eggGroups: ["Undiscovered"],
|
|
16942
|
+
requiredItem: "Vile Vial",
|
|
16943
|
+
changesFrom: "Venomicon",
|
|
16944
|
+
gen: 8,
|
|
16945
|
+
},
|
|
16913
16946
|
// NOTE: PokeStar "formes" are not actually formes and thus do not have a formeOrder
|
|
16914
16947
|
pokestarsmeargle: {
|
|
16915
16948
|
num: -5000,
|
package/data/rulesets.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Note: These are the rules that formats use
|
|
1
|
+
// Note: These are the rules that formats use
|
|
2
2
|
|
|
3
3
|
import {Utils} from "../lib";
|
|
4
4
|
|
|
@@ -791,13 +791,42 @@ export const Rulesets: {[k: string]: FormatData} = {
|
|
|
791
791
|
];
|
|
792
792
|
},
|
|
793
793
|
},
|
|
794
|
-
|
|
794
|
+
oneboostpasserclause: {
|
|
795
795
|
effectType: 'ValidatorRule',
|
|
796
|
-
name: '
|
|
797
|
-
desc: "Stops teams from having
|
|
798
|
-
banlist: ["Baton Pass > 3"],
|
|
796
|
+
name: 'One Boost Passer Clause',
|
|
797
|
+
desc: "Stops teams from having a Pokémon with Baton Pass that has multiple ways to boost its stats, and no more than one Baton Passer may be able to boost its stats",
|
|
799
798
|
onBegin() {
|
|
800
|
-
this.add('rule', '
|
|
799
|
+
this.add('rule', 'One Boost Passer Clause: Limit one Baton Passer that has a way to boost its stats');
|
|
800
|
+
},
|
|
801
|
+
onValidateTeam(team) {
|
|
802
|
+
const boostingEffects = [
|
|
803
|
+
'acidarmor', 'agility', 'amnesia', 'apicotberry', 'barrier', 'bellydrum', 'bulkup', 'calmmind', 'cosmicpower', 'curse',
|
|
804
|
+
'defensecurl', 'dragondance', 'ganlonberry', 'growth', 'harden', 'howl', 'irondefense', 'liechiberry', 'meditate',
|
|
805
|
+
'petayaberry', 'salacberry', 'sharpen', 'speedboost', 'starfberry', 'swordsdance', 'tailglow', 'withdraw',
|
|
806
|
+
];
|
|
807
|
+
let passers = 0;
|
|
808
|
+
for (const set of team) {
|
|
809
|
+
if (!set.moves.includes('Baton Pass')) continue;
|
|
810
|
+
let passableBoosts = 0;
|
|
811
|
+
const item = this.toID(set.item);
|
|
812
|
+
const ability = this.toID(set.ability);
|
|
813
|
+
for (const move of set.moves) {
|
|
814
|
+
if (boostingEffects.includes(this.toID(move))) passableBoosts++;
|
|
815
|
+
}
|
|
816
|
+
if (boostingEffects.includes(item)) passableBoosts++;
|
|
817
|
+
if (boostingEffects.includes(ability)) passableBoosts++;
|
|
818
|
+
if (passableBoosts === 1) passers++;
|
|
819
|
+
if (passableBoosts > 1) {
|
|
820
|
+
return [
|
|
821
|
+
`${set.name || set.species} has Baton Pass and multiple ways to boost its stats, which is banned by One Boost Passer Clause.`,
|
|
822
|
+
];
|
|
823
|
+
}
|
|
824
|
+
if (passers > 1) {
|
|
825
|
+
return [
|
|
826
|
+
`Multiple Pokemon have Baton Pass and a way to boost their stats, which is banned by One Boost Passer Clause.`,
|
|
827
|
+
];
|
|
828
|
+
}
|
|
829
|
+
}
|
|
801
830
|
},
|
|
802
831
|
},
|
|
803
832
|
cfzclause: {
|
package/data/text/items.ts
CHANGED
|
@@ -2336,4 +2336,8 @@ export const ItemsText: {[k: string]: ItemText} = {
|
|
|
2336
2336
|
name: "Crucibellite",
|
|
2337
2337
|
desc: "If held by a Crucibelle, this item allows it to Mega Evolve in battle.",
|
|
2338
2338
|
},
|
|
2339
|
+
vilevial: {
|
|
2340
|
+
name: "Vile Vial",
|
|
2341
|
+
desc: "If held by a Venomicon, its Poison- and Flying-type attacks have 1.2x power.",
|
|
2342
|
+
},
|
|
2339
2343
|
};
|
package/data/text/moves.ts
CHANGED
|
@@ -3729,7 +3729,7 @@ export const MovesText: {[k: string]: MoveText} = {
|
|
|
3729
3729
|
},
|
|
3730
3730
|
mimic: {
|
|
3731
3731
|
name: "Mimic",
|
|
3732
|
-
desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, if the user already knows the move, or if the move is Chatter, Dynamax Cannon, Mimic, Sketch, Struggle, Transform, or any Z-Move.",
|
|
3732
|
+
desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, if the user already knows the move, or if the move is Behemoth Bash, Behemoth Blade, Chatter, Dynamax Cannon, Mimic, Sketch, Struggle, Transform, or any Z-Move.",
|
|
3733
3733
|
shortDesc: "The last move the target used replaces this one.",
|
|
3734
3734
|
gen6: {
|
|
3735
3735
|
desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, if the user already knows the move, or if the move is Chatter, Mimic, Sketch, Struggle, or Transform.",
|
package/package.json
CHANGED
package/sim/battle-actions.ts
CHANGED
|
@@ -549,7 +549,7 @@ export class BattleActions {
|
|
|
549
549
|
[moveSteps[2], moveSteps[4]] = [moveSteps[4], moveSteps[2]];
|
|
550
550
|
}
|
|
551
551
|
|
|
552
|
-
if (
|
|
552
|
+
if (notActive) this.battle.setActiveMove(move, pokemon, targets[0]);
|
|
553
553
|
|
|
554
554
|
const hitResult = this.battle.singleEvent('Try', move, null, pokemon, targets[0], move) &&
|
|
555
555
|
this.battle.singleEvent('PrepareHit', move, {}, targets[0], pokemon, move) &&
|
package/sim/dex-formats.ts
CHANGED
|
@@ -883,7 +883,7 @@ export class DexFormats {
|
|
|
883
883
|
if (table.hasOwnProperty(id)) {
|
|
884
884
|
if (matchType === 'pokemon') {
|
|
885
885
|
const species: Species = table[id] as Species;
|
|
886
|
-
if (species.otherFormes && ruleid !== species.id + toID(species.baseForme)) {
|
|
886
|
+
if ((species.otherFormes || species.cosmeticFormes) && ruleid !== species.id + toID(species.baseForme)) {
|
|
887
887
|
matches.push('basepokemon:' + id);
|
|
888
888
|
continue;
|
|
889
889
|
}
|
package/sim/dex-species.ts
CHANGED
|
@@ -485,9 +485,10 @@ export class DexSpecies {
|
|
|
485
485
|
if (!isLetsGo) species.isNonstandard = 'Past';
|
|
486
486
|
}
|
|
487
487
|
if (this.dex.currentMod === 'gen8bdsp' &&
|
|
488
|
-
(!species.isNonstandard || species.isNonstandard
|
|
489
|
-
if (species.gen > 4 || species.num < 1
|
|
490
|
-
species.
|
|
488
|
+
(!species.isNonstandard || ["Gigantamax", "CAP"].includes(species.isNonstandard))) {
|
|
489
|
+
if (species.gen > 4 || (species.num < 1 && species.isNonstandard !== 'CAP') ||
|
|
490
|
+
species.id === 'pichuspikyeared') {
|
|
491
|
+
species.isNonstandard = 'Future';
|
|
491
492
|
species.tier = species.doublesTier = 'Illegal';
|
|
492
493
|
}
|
|
493
494
|
}
|
package/sim/pokemon.ts
CHANGED
|
@@ -794,7 +794,7 @@ export class Pokemon {
|
|
|
794
794
|
for (const pokemon of this.battle.getAllActive()) {
|
|
795
795
|
// can't use hasAbility because it would lead to infinite recursion
|
|
796
796
|
if (pokemon.ability === ('neutralizinggas' as ID) && !pokemon.volatiles['gastroacid'] &&
|
|
797
|
-
!pokemon.abilityState.ending) {
|
|
797
|
+
!pokemon.transformed && !pokemon.abilityState.ending) {
|
|
798
798
|
neutralizinggas = true;
|
|
799
799
|
break;
|
|
800
800
|
}
|
package/sim/team-validator.ts
CHANGED
|
@@ -540,6 +540,9 @@ export class TeamValidator {
|
|
|
540
540
|
problem = this.checkItem(set, item, setHas);
|
|
541
541
|
if (problem) problems.push(problem);
|
|
542
542
|
if (ruleTable.has('obtainablemisc')) {
|
|
543
|
+
if (dex.gen === 4 && item.id === 'griseousorb' && species.num !== 487) {
|
|
544
|
+
problems.push(`${set.name} cannot hold the Griseous Orb.`, `(In Gen 4, only Giratina could hold the Griseous Orb).`);
|
|
545
|
+
}
|
|
543
546
|
if (dex.gen <= 1) {
|
|
544
547
|
if (item.id) {
|
|
545
548
|
// no items allowed
|